Spring集成ActiveMQ

准备工作

JMS框架基本角色和编程模块

JMS Provider有如数据库,Producers/Consumers发送/接收消息前需要先连接到Provider,与建立数据库连接相似,JMS ConnectionFactory负责创建JMS Connection,JMS Connection创建JMS Session

在JMS Provider上可以定义多个Queue和Topic,Producers发送消息到哪个Queue/Topic,称具体的那个Queue/Topic为Destination.

JMS Destination : 一对一的Queue或者一对多的Topic

关于JMS编程模型可以参考以下文章:

Spring集成配置

Queue消息发送者(JMS Message Producers) :

ConnectionFactory : 用于连接Provider,支持连接池配置

JmsTemplate : Spring封装类,可用于创造消息、发送消息、接收消息等

<beanp:brokerURL=”tcp://localhost:61616″ /><bean><constructor-arg ref=”connectionFactory” /><property value=”TestQueue” /></bean><context:component-scan base-package=”com.stevex.demo” />

连接池配置示例:

<!– a pooling based JMS provider –> <bean destroy-method=”stop”><property><bean><property><value>tcp://localhost:61616</value></property></bean></property> </bean><!– Spring JMS Template –> <bean><property><ref local=”jmsFactory”/></property> </bean>

Queue消息接收者(JMS Message listener) :

ConnectionFactory : 用于连接Provider,支持连接池配置

Listener : 接收消息

jms:listener-container 简化了配置工作,destination只需要给queue/topic名称,,不需要额外定义

<beanp:brokerURL=”tcp://localhost:61616″ /><jms:listener-container container-type=”default”connection-factory=”connectionFactory” acknowledge=”auto”><jms:listener destination=”TestQueue” ref=”messageListener”method=”onMessage” /></jms:listener-container><bean/>

Topic消息发送者(JMS Message Producers) :

ConnectionFactory : 用于连接Provider,支持连接池配置

JmsTemplate : Spring封装类,可用于创造消息、发送消息、接收消息等

JmsTemplate 的pubSubDomain属性值为true表示destination为Topic类型,默认false表示destination为Queue类型。

<beanp:brokerURL=”tcp://localhost:61616″ /><bean><constructor-arg ref=”connectionFactory” /><property value=”TestTopic” /><property value=”true” /></bean><context:component-scan base-package=”com.stevex.demo” />

Topic消息接收者(JMS Message listener) :

ConnectionFactory : 用于连接Provider,支持连接池配置

Listener : 接收消息

Topic类型的消息,所有订阅者都可以接收到,本文Demo定义了两个接收者。

jms:listener-container 的destination-type属性默认值为queue,如果是Topic需要显示指定。

<beanp:brokerURL=”tcp://localhost:61616″ /><bean /><jms:listener-container container-type=”default”destination-type=”topic” connection-factory=”connectionFactory”acknowledge=”auto”><jms:listener destination=”TestTopic” ref=”subscriber1″method=”onMessage” /></jms:listener-container>

Producer类实现代码

@Component(“messageSender”)public class SimpleMessageSender implements MessageSender {@Autowiredprivate JmsTemplate jmsTemplate;@Overridepublic void sendMessage(final String message) {jmsTemplate.send(new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage(message);}});}}

Listener类实现代码

@Component(“messageListener”)public class SimpleMessageListener implements MessageListener {private static final Logger logger = LoggerFactory.getLogger(SimpleMessageListener.class);public void onMessage(Message message) {TextMessage textMessage = (TextMessage) message;try {logger.info(“Message received: ” + textMessage.getText());} catch (JMSException ex) {logger.error(“JMS error”, ex);}}}

应用跑起来后,ActiveMQ接收到连接后,如果请求的Queue/Topic不存在它会自动创建,我们也可以通过ActiveMQ Admin界面给Listener发消息。

本文出自 “力量来源于赤诚的爱!” 博客,请务必保留此出处

最快乐的时候,就是去旅行。

Spring集成ActiveMQ

相关文章:

你感兴趣的文章:

标签云: