文档章节

Spring3 JmsTemplate与MQ的集成

hefeiuu
 hefeiuu
发布于 2017/05/04 20:28
字数 603
阅读 15
收藏 0
基于IBM的产品一向对开发者不太友好,特此记录一下Spring JmsTemplate连接MQ的开发过程。
一、连接方式
MQ与大多数消息中间件一样,是标准的消息中间件服务器,提供异构平台之间的消息传递;
客户端连接MQ有两种方式,一是stand-alone,二是基于JNDI连接,两种方式的优缺点再次不在赘述,本文是以stand-alone方式连接,下面直奔主题。
二、Spring Jms配置
<!--WizRtf2Html Charset=0 --> <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
    default-lazy-init="false"
>
 
    <!-- WebSphere MQ Connection Factory -->
    <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="hostName">
            <value>${app.mq.hostName}</value>
        </property>
        <property name="port">
            <value>${app.mq.port}</value>
        </property>
        <property name="queueManager">
            <value>${app.mq.queueManager}</value>
        </property>
        <property name="channel">
            <value>${app.mq.channel}</value>
        </property>
        <property name="transportType" value="1" />
    </bean>
 
 
    <!-- JMS Queue Connection Factory -->
    <bean id="jmsQueueConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="mqConnectionFactory" />
        <property name="sessionCacheSize">
            <value>${app.jms.connectionFactory.sessionCacheSize}</value>
        </property>
    </bean>
 
    <!-- JMS Destination Resolver -->
    <bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver" />
 
    <!-- JMS Queue Template -->
    <bean id="jmsTemplateSend" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsQueueConnectionFactory" />
        <property name="destinationResolver" ref="jmsDestinationResolver" />
        <property name="pubSubDomain" value="false" />
    </bean>
 
    <!-- 定义接收者 -->
    <bean id="jmsListener" class="cn.com.yitong.mps.push.jms.JmsListener"></bean>
    <!-- 接受监听 -->
    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsQueueConnectionFactory" />
        <property name="destinationResolver" ref="jmsDestinationResolver" />
        <property name="messageListener" ref="jmsListener" />
        <property name="cacheLevelName" value="CACHE_CONSUMER" />
        <property name="taskExecutor" ref="jmsListenerTaskExecutor" />
        <property name="concurrentConsumers">
            <value>${app.jms.listenerContainer.concurrentConsumers}</value>
        </property>
        <property name="maxConcurrentConsumers">
            <value>${app.jms.listenerContainer.maxConcurrentConsumers}</value>
        </property>
        <property name="destinationName">
            <value>${app.jms.listenerContainer.destinationName}</value>
        </property>
    </bean>     
<!--WizRtf2Html Charset=0 -->     <!-- jms监听线程池 -->
    <bean id="jmsListenerTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize">
            <value>${app.jmsListenerExecutor.corePoolSize}</value>
        </property>
        <property name="maxPoolSize">
            <value>${app.jmsListenerExecutor.maxPoolSize}</value>
        </property>
        <property name="keepAliveSeconds">
            <value>${app.jmsListenerExecutor.keepAliveSeconds}</value>
        </property>
        <property name="queueCapacity">
            <value>${app.jmsListenerExecutor.queueCapacity}</value>
        </property>
        <property name="threadNamePrefix" value="jmsListenerTaskExecutor" />
    </bean>
 
</beans>
 
三、客户端jar包(以下jar包maven中央库中没有,需要自己从IBM MQ安装目录中拷贝)

 

com.ibm.mq.commonservices.jar
com.ibm.mq.defaultconfig.jar
com.ibm.mq.headers.jar
com.ibm.mq.jar
com.ibm.mq.jmqi.jar
com.ibm.mq.jms.Nojndi.jar
com.ibm.mq.pcf.jar
com.ibm.mq.postcard.jar
com.ibm.mq.tools.ras.jar
com.ibm.mqjms.jar
connector.jar
dhbcore.jar
fscontext.jar
jms.jar
jndi.jar
jta.jar
ldap.jar
mqcontext.jar
providerutil.jar
rmm.jar
 
四、MQ配置
1、建立队列管理器
2、建立通道(需要注意MCA,配制成当前服务器的用户,否则客户端连接会有权限问题)
 
五、备注
配置中使用了CachingConnectionFactory,为发送提供缓存,可以提高效率;
监听时配置了线程池,Spring默认使用<!--WizRtf2Html Charset=0 -->SimpleAsyncTaskExecutor,每次都会创建新的线程,开销较大,故配置了固定的线程池提高效率

本文转载自:http://ufopw.iteye.com/blog/1935246

共有 人打赏支持
hefeiuu
粉丝 3
博文 64
码字总数 0
作品 0
合肥
spring boot框架学习12-spring boot整合active mq方法1

本章节主要内容:主要从以下几个方面讲解:mybatis和spring boot整合、redis(单机版)和spring boot整合、redis(集群)和spring boot整合、httpclient和spring boot整合、rabbitMQ/active MQ和...

799879287
2017/12/10
0
0
Spring 系列,第 4 部分: Spring JMS 消息处理 1-2-3

在 Spring 系列 的第 4 期也是最后一期中,我将介绍 Spring JMS(Java 消息服务)框架的特性。JMS PG 定义了 Java 应用程序通过面向消息的中间件(MOM)创建和交换消息的标准途径。 就像在这...

蜡笔小小小新
2015/10/06
132
0
黄登峰/spring-amq

Spring-mq项目简介 spring 对active mq的封装 简化操作 使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性。 系统包括对queue 和 topic 的的操作模拟 利用spring 提供的jmstempla...

黄登峰
2016/11/14
0
0
activemq高并发下点对点应答模式,消息不一致问题

mq版本:5.9 参考相关博客以及官方文档,做了mq的P2P回复模式。思路如下 用户请求,放入队列A,然后等待回复消息(队列B中的内容),A处理完成后,发送回复消息到队列B。 根据官方文档也设置...

Barrylo
2017/01/12
541
6
ActiveMQ与Spring整合

1.配置ConnectionFactory ConnectionFactory是用来生产JMS连接的 spring为我们提供了多种ConnectionFactory 其中有:SingleConnectionFactory 和 CachingConnectionFactory. xml 配置...

多米亚单色
2016/02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.X部署Zabbix4.0

  /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p 密码 数据库导入完成后需要个Zabbix配置数据库密码,修改/etc/zabbix/zabbix_server.conf文件:   DBPassword......

寰宇01
7分钟前
1
0
工厂模式

(从别人里copy的,方便自己查看) 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使...

南桥北木
33分钟前
0
0
rabbitmq学习(一)

RabbitMQ是目前非常热门的一款消息中间件,具有高可靠、易拓展、高可用及丰富的功能 1.什么是消息中间件 消息是指在应用间传送的数据。包含文本字符串、JSON、内嵌对象 消息队列中间件(消息...

hensemlee
37分钟前
1
0
学习设计模式——原型模式

1. 认识原型模式 1. 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 2. 结构: Prototype:声明一个克隆自身的接口,用来约束想要克隆自己的具体实现类,要求这些类...

江左煤郎
43分钟前
1
0
观察者模式

观察者模式的套路 有如下角色: 事件,比如修改,用户点击; 事件队列,触发事件之后,会把事件一个一个放入事件队列 监听器,采用某种方式(一般是轮询,或者io阻塞机制),来判断事件队列是否有新的未...

黄威
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部