ActiveMQ订阅模式持久化实现
实现步骤:
1、配置发送xml,applicationContext-send.xml
- <?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:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:property-placeholder location="classpath:/properties/jms.properties" />
- <!-- 配置JMS连接工厂 -->
- <bean id="myConnectionFactory"
- class="org.springframework.jms.connection.CachingConnectionFactory">
- <!-- Session缓存数量 -->
- <property name="sessionCacheSize" value="10" />
- <property name="targetConnectionFactory">
- <bean class="org.apache.activemq.ActiveMQConnectionFactory">
- <!-- MQ地址 -->
- <property name="brokerURL" value="${brokerUrl}" />
- <!-- 是否异步发送 -->
- <property name="useAsyncSend" value="true" />
- </bean>
- </property>
- </bean>
- <!-- 发送消息的目的地(一个主题) -->
- <bean id="myDestination" class="org.apache.activemq.command.ActiveMQTopic">
- <!-- 设置消息主题的名字 -->
- <constructor-arg index="0" value="${send.name}" />
- </bean>
- <!-- 配置JMS模版 -->
- <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
- <property name="connectionFactory" ref="myConnectionFactory" />
- <property name="defaultDestination" ref="myDestination" />
- <!-- 订阅发布模式 -->
- <property name="pubSubDomain" value="true" />
- <property name="receiveTimeout" value="10000" />
- </bean>
- </beans>
2、编写发送java,ActiveMQsender.java
- package com.by.activeMQ;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.jms.core.JmsTemplate;
- import org.springframework.jms.core.MessageCreator;
- public class ActiveMQsender {
- public static void main(String[] args) {
- @SuppressWarnings("resource")
- ApplicationContext ctx = new ClassPathXmlApplicationContext(
- "ApplicationContext/applicationContext-send.xml");
- JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");
- jmsTemplate.send(new MessageCreator() {
- public Message createMessage(Session session) throws JMSException {
- TextMessage msg = session.createTextMessage();
- // 设置消息属性
- msg.setStringProperty("mood", "happy");
- // 设置消息内容
- msg.setText("Hello World!");
- return msg;
- }
- });
- System.out.println("send end");
- }
- }
3、配置接收xml,applicationContext-receive.xml
- <?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:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:property-placeholder location="classpath:/properties/jms.properties" />
- <!-- 第一个接收者 -->
- <!-- 配置JMS连接工厂 -->
- <bean id="myConnectionFactory"
- class="org.springframework.jms.connection.CachingConnectionFactory">
- <!-- Session缓存数量 -->
- <property name="sessionCacheSize" value="10" />
- <!-- 接收者ID -->
- <property name="clientId" value="${topic.clientId}" />
- <property name="targetConnectionFactory">
- <bean class="org.apache.activemq.ActiveMQConnectionFactory">
- <!-- MQ地址 -->
- <property name="brokerURL" value="${brokerUrl}" />
- </bean>
- </property>
- </bean>
- <!-- 发送消息的目的地(一个主题) -->
- <bean id="myDestination" class="org.apache.activemq.command.ActiveMQTopic">
- <!-- 设置消息主题的名字 -->
- <constructor-arg index="0" value="${topic.name}" />
- </bean>
- <!-- 生产消息配置 (自己定义)-->
- <bean id="myTopicConsumer" class="com.by.activeMQ.ActiveMQreceiver" />
- <!-- 消息监听器 -->
- <bean id="myTopicListener"
- class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
- <constructor-arg ref="myTopicConsumer" />
- <!-- 接收消息的方法名称 -->
- <property name="defaultListenerMethod" value="receive" />
- <!-- 不进行消息转换 -->
- <property name="messageConverter"><null/></property>
- </bean>
- <!-- 消息监听容器 -->
- <bean id="myListenerContainer"
- class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="myConnectionFactory" />
- <!-- 发布订阅模式 -->
- <property name="pubSubDomain" value="true"/>
- <!-- 消息持久化 -->
- <property name="subscriptionDurable" value="true"/>
- <property name="receiveTimeout" value="10"/>
- <!-- 接收者ID -->
- <property name="clientId" value="${topic.clientId}" />
- <property name="durableSubscriptionName" value="${topic.clientId}"/>
- <property name="destination" ref="myDestination" />
- <property name="messageListener" ref="myTopicListener" />
- </bean>
- <!-- 第二个接收者 -->
- <!-- 配置JMS连接工厂 -->
- <bean id="myConnectionFactory2"
- class="org.springframework.jms.connection.CachingConnectionFactory">
- <!-- Session缓存数量 -->
- <property name="sessionCacheSize" value="10" />
- <!-- 接收者ID -->
- <property name="clientId" value="${topic2.clientId}" />
- <property name="targetConnectionFactory">
- <bean class="org.apache.activemq.ActiveMQConnectionFactory">
- <!-- MQ地址 -->
- <property name="brokerURL" value="${brokerUrl}" />
- </bean>
- </property>
- </bean>
- <!-- 发送消息的目的地(一个主题) -->
- <bean id="myDestination2" class="org.apache.activemq.command.ActiveMQTopic">
- <!-- 设置消息主题的名字 -->
- <constructor-arg index="0" value="${topic2.name}" />
- </bean>
- <!-- 生产消息配置 (自己定义)-->
- <bean id="myTopicConsumer2" class="com.by.activeMQ.ActiveMQreceiver2" />
- <!-- 消息监听器 -->
- <bean id="myTopicListener2"
- class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
- <constructor-arg ref="myTopicConsumer2" />
- <!-- 接收消息的方法名称 -->
- <property name="defaultListenerMethod" value="receive" />
- <!-- 不进行消息转换 -->
- <property name="messageConverter"><null/></property>
- </bean>
- <!-- 消息监听容器 -->
- <bean id="myListenerContainer2"
- class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="myConnectionFactory2" />
- <!-- 发布订阅模式 -->
- <property name="pubSubDomain" value="true"/>
- <!-- 消息持久化 -->
- <property name="subscriptionDurable" value="true"/>
- <property name="receiveTimeout" value="10"/>
- <!-- 接收者ID -->
- <property name="clientId" value="${topic2.clientId}" />
- <property name="durableSubscriptionName" value="${topic2.clientId}"/>
- <property name="destination" ref="myDestination2" />
- <property name="messageListener" ref="myTopicListener2" />
- </bean>
- </beans>
4、编写接收java,ActiveMQreceiver.java
- package com.by.activeMQ;
- import javax.jms.JMSException;
- import javax.jms.TextMessage;
- import org.springframework.jms.JmsException;
- public class ActiveMQreceiver {
- public void receive(TextMessage message) throws JmsException, JMSException {
- String info = "this is receiver, "
- + " mood is " + message.getStringProperty("mood") + ","
- + "say " + message.getText();
- System.out.println(info);
- }
- }
5、编写另一个接收java,ActiveMQreceiver.java
- package com.by.activeMQ;
- import javax.jms.JMSException;
- import javax.jms.TextMessage;
- import org.springframework.jms.JmsException;
- public class ActiveMQreceiver2 {
- public void receive(TextMessage message) throws JmsException, JMSException {
- String info = "this is receiver2,"
- + " mood is " + message.getStringProperty("mood") + ","
- + "say " + message.getText();
- System.out.println(info);
- }
- }
6、编写一个main,开启接收监听,openReceive.java
- package com.by.activeMQ;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class openReceive {
- public static void main(String[] args) {
- @SuppressWarnings({ "unused", "resource" })
- ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext/applicationContext-receive.xml");
- while(true) {
- }
- }
- }
7、编写一个配置文件,jms.properties
- #send
- send.name=Topic_Mood
- #receive
- topic.name=Topic_Mood
- topic.clientId=client_LiLei
- topic2.name=Topic_Mood
- topic2.clientId=client_HanMei
- #url
- brokerUrl=failover:(tcp://10.0.0.232:61616)?initialReconnectDelay=1000
8、pom里面添加activeMQ的依赖
- <dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-pool</artifactId>
- <version>5.11.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-pool2</artifactId>
- <version>2.3</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jms</artifactId>
- <version>4.0.0.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-all</artifactId>
- <version>5.11.1</version>
- </dependency>
耶,运行就ok了。
发送消息的输出是这样的:
- 2016-08-05 11:27:19 [ main:0 ] - [ INFO ] Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@16011db4: startup date [Fri Aug 05 11:27:19 CST 2016]; root of context hierarchy
- 2016-08-05 11:27:19 [ main:31 ] - [ INFO ] Loading XML bean definitions from class path resource [ApplicationContext/applicationContext-send.xml]
- 2016-08-05 11:27:19 [ main:187 ] - [ INFO ] Loading properties file from class path resource [properties/jms.properties]
- 2016-08-05 11:27:19 [ main:392 ] - [ INFO ] Established shared JMS Connection: ActiveMQConnection {id=ID:MDG42V9PSU28IKA-60542-1470367639797-1:1,clientId=null,started=false}
- 2016-08-05 11:27:19 [ ActiveMQ Task-1:467 ] - [ INFO ] Successfully connected to tcp://10.0.0.232:61616
- send end
接收消息的输出是这样的:
- 2016-08-05 11:28:04 [ ActiveMQ Task-1:490 ] - [ INFO ] Successfully connected to tcp://10.0.0.232:61616
- 2016-08-05 11:28:04 [ main:498 ] - [ INFO ] Established shared JMS Connection: ActiveMQConnection {id=ID:MDG42V9PSU28IKA-60544-1470367684739-1:1,clientId=client_LiLei,started=false}
- 2016-08-05 11:28:04 [ ActiveMQ Task-1:504 ] - [ INFO ] Successfully connected to tcp://10.0.0.232:61616
- 2016-08-05 11:28:04 [ main:509 ] - [ INFO ] Established shared JMS Connection: ActiveMQConnection {id=ID:MDG42V9PSU28IKA-60544-1470367684739-3:1,clientId=client_HanMei,started=false}
- this is receiver2, mood is happy,say Hello World!
- this is receiver, mood is happy,say Hello World!
配置另一个接收者就是,把第一个接收者的配置复制,然后添加个2,再把接收类复制,添加个2,就搞定了。这种方式也适用于mongodb啊这种配置。在一个工程里面操作两个mongodb数据库。
ActiveMQ订阅模式持久化实现的更多相关文章
- ACtiveMQ中间件-发布订阅模式
前言:ActiveMQ学习心得 1.MQ是什么 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信, ...
- ActiveMQ的p2p模式与发布订阅模式
1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题 传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求 ...
- ActiveMQ发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ发布订阅模式(转)
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ (二)—发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- SpringBoot2.0之整合ActiveMQ(发布订阅模式)
发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...
- ActiveMQ入门系列三:发布/订阅模式
在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
随机推荐
- Linux下如何查看文档的内容
查看文档内容的命令有:cat tac head nl tail more less odcat命令显示文档的全部内容,当文档较大的时候只显示最后的部分,所以cat命令适合查看内容较少的文档.可加选项- ...
- [水煮 ASP.NET Web API2 方法论](1-5)ASP.NET Web API Scaffolding(模板)
问题 我们想快速启动一个 ASP.NET Web API 解决方案. 解决方案 APS.NET 模板一开始就支持 ASP.NET Web API.使用模板往我们的项目中添加 Controller,在我 ...
- .net core 2.0学习记录(三):内置IOC与DI的使用
本篇的话介绍下IOC和ID的含义以及如何使用.Net Core中的DI. 一.我是这么理解IOC和DI的: IOC:没有用IOC之前是直接new实例来赋值,使用IOC之后是通过在运行的时候根据配置来实 ...
- centos7yum安装tomcat
执行安装命令 [root@localhost ~]# yum -y install tomcat 查询tomcat是否安装成功 [root@localhost ~]# rpm -q tomcat to ...
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8001 -j DNAT --to-destination 172.17.0.5:8080 ! -i docker0: iptables: No chain/target/match by that name.
在docker容器上部署项目后,启动docker容器,出现 iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dpor ...
- UVa 221 Urban Elevations 城市正视图 离散化初步 无限化有限
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 题目大意: 题目传送门:UVa 221 Urban Elevations 给出城市中建筑物的x, ...
- ZOJ 3206 Disaster Area Reconstruction
已经确定本题是错题了! ---------------------------------------------------------------- 这题有问题,不是后台数据水了就是出题人的做法是 ...
- 洛谷P3038 牧草种植 [树链剖分]
题目传送门 牧草种植 题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirec ...
- [转载]开发 Spring 自定义视图和视图解析器
原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...
- mysql中timestamp类型的应用
在开发过程中我们一般需要记住某条记录的创建时间,在MySQL中如果使用dateTime类型的话,无法设定默认值,我们可以采用timestamp类型来记录创建时间.但是随之而来的有个问题,比如说你的这个 ...