Activemq 结合Spring的常用配置

[size=large][b]需要配置的参数:[/[/b]size]
[b]消息消费者的配置[/b]
[b]一、connectionFactory:[/b]
<bean id="queueJmsConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL"
value="tcp://10.100.1.117:61616?wireFormat.maxInactivityDuration=0" />
<property name="useAsyncSend" value="true" />
</bean>

以上配置指明MQ服务所在的服务器。
[b]二、配置queue:[/b]
<amq:queue name="recommendq" physicalName="eps.recommendq" />
<amq:queue name="volumeq" physicalName="eps.volumeq" />
<amq:queue name="mailq" physicalName="eps.mailq" />

服务器上有几个Q,这里就配置几个,physicalName即是服务器上Q的名字

[b]三、配置convert:[/b]
发送到mq的消息,要先经过convert类的toMessage方法,才能发送,消费者接收后要经过convert的fromMessage方法后才能给consumer使用,但这两步都是由activeMq jar包自己调用,我们要做的只是
重写toMessage和fromMessage两个方法就可
<bean id="recommendFlowQConvert"
class="com.lenovo.lps.epub.bes.mq.convert.RecommendFlowQConvert" />


上边的RecommendFlowQConvert类实现了MessageConverter接口,同时重写fromMessage和toMessage方法
代码:
public class RecommendFlowQConvert implements MessageConverter{

/**
*
* 所传输对象必须实现Serializable接口
*
* 示例
*/
@Override
public Object fromMessage(Message msg) throws JMSException,
MessageConversionException {
TextMessage textMessage;
if (msg instanceof TextMessage) {
textMessage = (TextMessage) msg;
System.out.println("RecommendFlowQConvert:" + textMessage.getText());
return textMessage.getText();
}
return null;

}

/**
* 示例
*/
@Override
public Message toMessage(Object obj, Session session) throws JMSException,
MessageConversionException {
TextMessage textMessage = session.createTextMessage((String) obj);
return textMessage;
}

}

[b]四、配置consumer:[/b]
consumer是消息的真正接收者,这类比如下边的RecommendFlowQConsumer,不必实现任何接口或继承类,里边都是业务方法
<bean id="recommendFlowQConsumer" class="com.lenovo.lps.epub.bes.mq.RecommendFlowQConsumer"
scope="prototype" />
<bean id="subscribeFlowQConsumer" class="com.lenovo.lps.epub.bes.mq.SubscribeFlowQConsumer"
scope="prototype" />
<bean id="sendMailQConsumer" class="com.lenovo.lps.epub.bes.mq.SendMailQConsumer"
scope="prototype" />

[b]五、配置convert和consumer的监听器(listener),每一对convert和consumer就对应一个监听器[/b]
listener的作用是监听服务器上queue,是否有了新值,如果有了,就按配置执行convert,consumer
<bean id="recommendFlowQListener"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg ref="recommendFlowQConsumer" /><!--这里的ref="recommendFlowQConsumer" 就是指定上边的配置的consumer-->
<property name="defaultListenerMethod" value="receive" /><!--定义consumer里用来处理这个监听的方法-->
<property name="messageConverter" ref="recommendFlowQConvert" /><!--指定上边配置的convert-->
</bean>


[b]六、配置listener的container:一个listener对应一个container[/b]
<bean id="recommendFlowQContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="queueJmsConnectionFactory" /><!--指定容器的连接工厂-->
<property name="destination" ref="recommendq" /><!---->
<property name="messageListener" ref="recommendFlowQListener" /><!--指定对应的监听器或者说容器中要放置的监听器-->
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" /><!---->
<property name="receiveTimeout" value="20000" /><!--连接超时时限-->
</bean>

[b][size=x-large] 消息生产者的配置[/size][/b]
[b]一、配置连接工厂,同上[/b]
[b]二、配置jmsTemplate作用就同jdbcTemplate:[/b]
<bean id="subscribeFlowQTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<!-- lets wrap in a pool to avoid creating a connection per send -->
<bean class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="queueJmsConnectionFactory" /><!--指定连接池-->
</bean>
</property>
<!-- custom MessageConverter -->
<property name="messageConverter" ref="subscribeFlowQConvert" /><!-- 指定消息转换器 -->
<property name="receiveTimeout" value="20000" />
</bean>

[b]三、指定消息生产者类[/b]
如下边的SubscribeFlowQProducer,该就是一个普通的相当于service层的一个类,不用继承或实现任何类或接口,但要有两个属性,分别用来指定jmsTemplate和q
<bean id="subscribeFlowQProducer" class="com.lenovo.lps.epub.bes.mq.SubscribeFlowQProducer">
<property name="template" ref="subscribeFlowQTemplate" />
<property name="destination" ref="volumeq" />
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值