在上一篇文章里 我说到了 maven的配置  我现在直接说 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:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd"
> <!-- <context:component-scan base-package="com.gzframe.demo.activemq" />
<mvc:annotation-driven /> --> <amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://60.205.212.39:61616"
userName="admin"
password="admin" /> <!-- 配置JMS连接工长 -->
<bean id="connectionFactoryMq"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="100" />
</bean> <!-- 定义主题 -->
<!-- 定义消息主题(topic) 在这里要注意一下 -->
<bean id="demoTopicDestination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 设置消息队列的名字 -->
<constructor-arg>
<value>topic.demo2</value>
</constructor-arg>
</bean>
<!-- 配置JMS模板(topic),Spring提供的JMS工具类,它发送、接收消息。org.apache.activemq.command.ActiveMQQueue 如果你用的是这个 系统不会报错 但是 你生产的 会在队列里生产出来 也会在 主题里 -->
<bean id="jmsTemplateTopic" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactoryMq" />
<property name="defaultDestination" ref="demoTopicDestination" />
<property name="receiveTimeout" value="10000" />
<!-- true是topic,false是queue,默认是false,此处显示写出false -->
<property name="pubSubDomain" value="true" />
</bean> </beans>

配置好了以后  下面是我的controller层   这个我直接就写方法了  因为在上一篇文章里  我写的controller 都在一起

@Autowired
private ActiveMqTopicsService activeMqTopicsService;
/**
*
* @Title: TestTopic @Description: 一个标题 发布 生产者 @param 设定文件 @return void
* 返回类型 @throws
*/
@RequestMapping("TestTestTopic")
public void TestTopic() {
activeMqTopicsService.TestTopic();
}
@Service
public class ActiveMqTopicsServiceImpl implements ActiveMqTopicsService{ @Resource(name="jmsTemplateTopic")
private JmsTemplate jmsTemplate; //队列名gzframe.demo
@Resource(name="demoTopicDestination")
private Destination destination;
/**
*
* @Title: TestTopic
* @Description: 一个标题 发布 生产者
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void TestTopic() {
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage msg = session.createTextMessage();
// 设置消息属性
msg.setStringProperty("phrCode", "C001");
// 设置消息内容
msg.setText("Hello World! bug1");
return msg;
}
});
}
}

运行结果

在这里  我先说一下 我的个人习惯  我想把这个东西都已经放进去了 我就想用请求  取出来  可是 找了 很久发现 取不出来 应该是订阅的关系  所以显示订阅   你订阅了以后  你放进去东西 才会给你返回  自己单独取应该是取不出来的   主题就是订阅模式吧

我先配置一下我的xml  首先你要订阅它  然后配置监听

在这里 要注意下  需要重新配置一下工厂   这个订阅与生产者是同一个xml  在订阅里已经设置了 订阅主题的名字

 <!-- 配置JMS连接工厂 -->
<bean id="consumerConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="failover:(tcp://**.**.***.***:61616)" />
<property name="useAsyncSend" value="true" />
<property name="clientID" value="consumerClienctConnect" />
</bean>

然后消费者订阅

<!-- 消息订阅客户端1 -->
<bean id="consumerListenerClient1" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="consumerConnectionFactory" />
<!-- 开启订阅模式 -->
<property name="pubSubDomain" value="true"/>
<property name="destination" ref="demoTopicDestination" />
<property name="subscriptionDurable" value="true"/>
<!---这里是设置接收客户端的ID,在持久化时,但这个客户端不在线时,消息就存在数据库里,直到被这个ID的客户端消费掉-->
<property name="clientId" value="consumerClient1"/>
<property name="messageListener" ref="activeMqTopicsServiceImpl" />
<!-- 消息应答方式
Session.AUTO_ACKNOWLEDGE 消息自动签收
Session.CLIENT_ACKNOWLEDGE 客户端调用acknowledge方法手动签收
Session.DUPS_OK_ACKNOWLEDGE 不必必须签收,消息可能会重复发送
-->
<property name="sessionAcknowledgeMode" value="1"/>
</bean>
<!-- 消息订阅客户端2 -->
<bean id="consumerListenerClient2" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="consumerConnectionFactory" />
<!-- 开启订阅模式 -->
<property name="pubSubDomain" value="true"/>
<property name="destination" ref="demoTopicDestination" />
<property name="subscriptionDurable" value="true"/>
<!---这里是设置接收客户端的ID,在持久化时,但这个客户端不在线时,消息就存在数据库里,直到被这个ID的客户端消费掉-->
<property name="clientId" value="consumerClient2"/>
<property name="messageListener" ref="activeMqTopicsServiceImpl" />
<!-- 消息应答方式
Session.AUTO_ACKNOWLEDGE 消息自动签收
Session.CLIENT_ACKNOWLEDGE 客户端调用acknowledge方法手动签收
Session.DUPS_OK_ACKNOWLEDGE 不必必须签收,消息可能会重复发送
-->
<property name="sessionAcknowledgeMode" value="1"/>
</bean>

在配置文件完成了以后  在java里要实现这个接口MessageListener

@Service
public class ActiveMqTopicsServiceImpl implements ActiveMqTopicsService,MessageListener { @Resource(name="jmsTemplateTopic")
private JmsTemplate jmsTemplate; //队列名gzframe.demo
@Resource(name="demoTopicDestination")
private Destination destination; @Override
public void onMessage(Message arg0) {
TextMessage tm = (TextMessage)arg0;
try {
System.out.println("从订阅主题--" + destination.toString() + "收到了消息:\t"
+ tm.getText());
tm.acknowledge();
String str = tm.getText();
} catch (JMSException e) {
e.printStackTrace();
} }
}

这个实现与接口我都放在了一起  看见的要注意下呀

实现结果

因为我我配置了 两个 消费者  所以会监听两次 出现两个输出

到这里就结束了  就是很简单的例子 这篇文章与上一篇文章  我也是 在网上找的例子 自己整合了一下 做的实现  我也是个初学者  希望给大家一点点小帮助  哈哈哈

叙述 activemq 与spring 主题实现 小功能实现的更多相关文章

  1. ActiveMQ集成Spring使用

    现在任何一个框架的使用都会结合spring框架,quartz.cxf与平时常见的Hibernate.mybatis.Struts等都可以与spring集成起来使用,在这里研究了activemq结合sp ...

  2. Struts+Hibernate+Spring实现用户登录功能

    通过登录案例实现三大框架之间的整合,登录功能是任何系统和软件必不可少的一个模块,然而通过这个模块来认识这些复杂的框架技术,理解数据流向和整个设计思路是相当容易的.只有在掌握了这些小模块的应用后,才能轻 ...

  3. spring 主题使用详解[转]

    在common_include_v2.jsp文件中,spring主题的使用: <link href="${staticPath }/<spring:theme code='sty ...

  4. ActiveMQ与spring整合

    第一步:引用相关的jar包 <dependency> <groupId>org.springframework</groupId> <artifactId&g ...

  5. activeMQ和spring的整合

    http://www.cnblogs.com/shuai-server/p/8966299.html  这篇博客中介绍了activemq传递消息的两种方式,今天分享的是activemq框架和sprin ...

  6. ActiveMQ整合spring、同步索引库

    1.   Activemq整合spring 1.1. 使用方法 第一步:引用相关的jar包. <dependency> <groupId>org.springframework ...

  7. iOS常用小功能

    CHENYILONG Blog 常用小功能 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  ...

  8. iOS 网易彩票-6设置模块三(常用小功能)

    该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblog ...

  9. iOS 常用小功能 总结

    常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSUR ...

随机推荐

  1. debian系统的另一个包管理器aptitude

    最近在玩OPI的时候遇到了一个包因为各种依赖问题死活装不上.苦搜很久找到这个aptitude包管理器. 基于debain衍生的各种操作系统比较常用包管理器是apt,不过apt在遇到依赖问题的时候处理得 ...

  2. Linux常用命令大全(分类)

    首先按ESC键回到命令模式: vi保存文件有不同的选项,对应于不同的命令,你可以从下面的命令中选择一个需要的::w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi:w! ...

  3. 单链表查找第i个节点

    #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct Node { char ...

  4. 【Linux】【Jenkins】配置过程中,立即构建时,maven找不到的问题解决方案

    在Linux环境下配置Jenkins执行时,发现不能执行Maven,这个比较搞了. A Maven installation needs to be available for this projec ...

  5. CUDA compiler driver nvcc 散点 part 1

    ▶ 参考[https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html] ▶ nvcc 预定义的宏 __NVCC__ // 编译 ...

  6. Android开发中常见的设计模式(三)——观察者模式

    先看下这个模式的定义. 定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新 先来讲几个情景. 情景1:有一种短信服务,比如天气预报服务,一旦你订阅 ...

  7. leetcode39

    public class Solution { List<IList<int>> list = new List<IList<int>>();//全部记 ...

  8. iphone 开发h5 踩过的坑

    html,body{ -webkit-text-size-adjust: none; }  // 当需要在中文版chrome浏览器中显示小于12px的字体时,而且此时页面放大效果会被阻止 html,b ...

  9. Linux命令:unlias

    语法 unalias [-a] name [name ...] 说明 取消别名. 可以一次取消多个别名,写几个取消几个.不写,取消所有别名. 参数 -a 取消所有别名,不论后面是否跟一个还是多个nam ...

  10. Linux命令:mapfile

    mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组] 两个作用: 一是给index数组读取标准输入来赋值:二是文件描述 ...