文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
2
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
2
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
68
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部