一直在赶项目,好久没有写博文了,中间偶尔有些代码什么的,也都是放到github了,不过大多都是测试代码,毕竟有些成型的东西是给公司写的,鉴于职业道德,还是不好公开。

言归正传,这两天在接入第三方的收费管理系统,后台有个扫描记录的,数据然后发送到我这里,然后我来处理。

毕竟是走的restful的方式,说到底是比较多的http请求,他们不关心结果,只知道通信成功即可。于是,又用到了消息队列。前面用的是activemq,这里需要再配置一个队列。

如果不整合spring,用原生的activemq代码来写的话,多个队列很容易实现。但是整合spring后,大多都是配置一个队列。琢磨了一下,这里配置了两个队列,其实就是一个配置文件。因为是测试,这样写的有点不雅观。

配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 消息中介-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0"/>
<property name="useAsyncSend" value="true" />
</bean> <!-- 队列目的地-->
<bean id="myQueueOne" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="QueueDemoOne"/>
</bean>
<bean id="myQueueTwo" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="QueueDemoTwo" />
</bean> <bean id="jmsTemplateOne" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!-- 设置默认的消息目的地-->
<property name="defaultDestination" ref="myQueueOne"/>
<property name="deliveryMode" value="1"></property>
<!-- 消息不持久化 -->
<property name="explicitQosEnabled" value="true"></property>
<!-- 由于receiver方法是同步的,所以我们在这里对接收设置超时时间-->
<!-- <property name="receiveTimeout" value="60000"/> -->
</bean>
<bean id="jmsTemplateTwo" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!-- 设置默认的消息目的地-->
<property name="defaultDestination" ref="myQueueTwo"/>
<property name="deliveryMode" value="1"></property>
<!-- 消息不持久化 -->
<property name="explicitQosEnabled" value="true"></property>
</bean> <!-- 消息发送者-->
<bean id="producer1" class="com.ww.topic.SenderOne">
<property name="jmsTemplate" ref="jmsTemplateOne"/>
<!-- 消息目的地,因为jmsTemplate有默认的了,所以这里可以省略
<property name="destination" ref=" myQueue "/>-->
</bean>
<bean id="producer2" class="com.ww.topic.SenderTwo">
<property name="jmsTemplate" ref="jmsTemplateTwo"/>
<!-- 消息目的地,因为jmsTemplate有默认的了,所以这里可以省略
<property name="destination" ref=" myQueue "/>-->
</bean> <!-- 消息接收监听器用于异步接收消息-->
<bean id="container1" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="myQueueOne"/>
<property name="messageListener" ref="jmsListenerOne"/>
</bean>
<bean id="container2" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="myQueueTwo"/>
<property name="messageListener" ref="jmsListenerTwo"/>
</bean> <!-- 消息监听实现方法一 -->
<bean id="jmsListenerOne" class="com.ww.topic.ListenerOne">
</bean>
<bean id="jmsListenerTwo" class="com.ww.topic.ListenerTwo">
</bean> </beans>

其实是配置了两个监听器,然后把各自的destination ,sender,listener配置了两个。

测试代码:

sender:

package com.ww.topic;

import org.junit.Test;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage; /**
* Created by wang on 15-3-24.
*/
public class SenderOne {
private JmsTemplate jmsTemplate; public JmsTemplate getJmsTemplate() {
return jmsTemplate;
} public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
} @Test
public void sendQueue(){
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage();
message.setText("This is one sender");
return message;
}
});
}
}

listener:

package com.ww.topic;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* Created by wang on 15-3-24.
*/
public class ListenerOne implements MessageListener {
@Override
public void onMessage(Message message) {
TextMessage msg = (TextMessage) message;
try {
System.out.println("REC: "+msg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}

第二个和第一个是同理的代码。

源码下载:https://github.com/ThinkCats/Queue

ActiveMq 配置多队列的更多相关文章

  1. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  2. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  3. zookeeper + LevelDB + ActiveMQ实现消息队列高可用

    通过集群实现消息队列高可用. 消息队列在项目中存储订单.邮件通知.数据分发等重要信息,故对消息队列稳定可用性有高要求. 现在通过zookeeper选取activemq leader的形式实现当某个ac ...

  4. ActiveMQ配置文档

    本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...

  5. ACTIVEMQ主题、队列设置用户名密码

    修改文件%ACTIVEMQ_BASE%/conf/activemq.xml,用户名密码储存在文件%ACTIVEMQ_BASE%/conf/credentials.properties中, active ...

  6. Spring集成ActiveMQ配置 --转

    转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...

  7. activeMq 配置(一)

    基础知识补充 1.ActiveMQ从入门到精通(一)https://www.jianshu.com/p/ecdc6eab554c 2.ActiveMQ从入门到精通(二)https://www.jian ...

  8. Spring和ActiveMQ集成实现队列消息以及PUB/SUB模型

    前言:本文是基于Spring和ActiveMQ的一个示例文章,包括了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,只是做了比较简单的实现,无任何业务方面的东西,作为一个 ...

  9. activemq 的延迟队列和幂等性检查

    一. 延迟消息队列 1. 在提交支付之后,可以发送一个延迟检查的队列,来主动查询用户在支付宝上的支付状态 在mq的配置/config/activeMq.xml的broker实例上配置 schedule ...

随机推荐

  1. UpdatePanel中弹出新窗口

    如果允许,在UpdatePanel中使用iframe即可,不允许的话,用下面的方法实现弹窗 要在UpdatePanel中使用FileUpload时,会遇到此问题,或者同类其它情况 <asp:Sc ...

  2. GridView上同时定义了 DataSource 和 DataSourceId

    VS平台下ASP.NET网站的建立,我们常常要跟数据库打交道,获取数据库的信息,通过GridView控件进行显示,需要为GridView指定 DataSourceId或者DataSource,切忌不可 ...

  3. 解决mysql无法远程登陆问题

    解决这个问题的思路: 一.先确定能过3306端口 二.再检查授权Host是否存在 (新授权记得flush privileges;)   一 步骤 1.首先打开mysql的配置文件,找到这句话,注释掉. ...

  4. linux系统命令笔记

    一.linux系统目录 /bin 系统命令目录 /dev 设备目录 /home 每个系统用户在home下都有一个目录, 每个用户登录到系统后会自动登录到这个目录下, root用户会在/root文件夹下 ...

  5. Thread(线程)和ThreadPool(线程池) Thread回调与返回值

    Thread(线程) Thread开启线程:接收一个参数 TestClass tc = new TestClass(); //没有返回值,有一个object类型的参数的委托:两种写法. Paramet ...

  6. Object类中通用方法之:toString()方法

    1.Java所有的对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法称为通用方法 2.toString()方法即为Object类中定义的通用方法之一 3.平时我们如果在控制台直接打 ...

  7. 调用父类构造器:super

    import static java.lang.System.*; class Base{ public String name; public double weight; public Base( ...

  8. apache的错误日志分析

  9. 用 npm 安装删除模块

    npm安装模块 [npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录: [npm install -g xxx]利用npm安装全局模块xxx: 本地安装时将模块写入pac ...

  10. 解决Android启动显示空白界面的问题

    Android程序启动时,第一个看的界面并不是我们的指定的第一个Activity界面,而是显示了一个空白的界面,带标题栏的,但是界面什么内容都没有,这个界面只显示不到1秒左右的时间就会切换到我们的第一 ...