文档章节

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-amq

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

黄登峰
2016/11/14
0
0
Spring 系列,第 4 部分: Spring JMS 消息处理 1-2-3

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

蜡笔小小小新
2015/10/06
132
0
ActiveMQ与Spring整合

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

多米亚单色
2016/02/25
0
0
Jms的MessageListener中的Jms事务

摘要 一般来说,如果为JmsTemplate做了事务配置,那么它将会与当前线程的数据库事务挂钩,并且仅在数据库事务的afterCommit动作中提交。 但是,如果一个MessageListener在接收Jms消息的同时,...

winters1224
2017/01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS实例详解:Flex布局

本文由云+社区发表 本文将通过三个简单的实例,实际应用上篇文章的基础理论知识,展示下Flex布局是如何解决CSS布局问题。 一.垂直居中 这里同时用非flex布局和flex布局两种方式来实现,可以...

腾讯云加社区
4分钟前
0
0
安装全局webpack

https://www.jianshu.com/p/119a825d8bba npm ls webpack 和npm ls webpack -g 查看本地和全局版本 npm install webpack@1.15.0 -g 全局 然后到项目里面 npm install npm init npm install w......

lsy999
16分钟前
0
0
/etc/profile和/etc/environment的区别

/etc/profile 文件 当一个用户登录Linux系统或使用 su 命令切换到另一个用户时,设置用户环境第一个读取的文件就是 /etc/profile ,此文件为系统全局变量配置文件,且仅仅在第一次登录系统时...

calmsnow
22分钟前
2
0
rabbitMQ日常管理(转)

一、网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二、rabbitMQ基本概念 RabbitMQ是一个开源的AMQP实现,服务器端用Erlan...

__HuWei
28分钟前
1
0
gitlab cicd

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

kut
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部