JMS-activeMq发布订阅模式(非持久订阅)

Publisher的代码:
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.DeliveryMode;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import javax.jms.MessageProducer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq.ActiveMQConnectionFactory;
- public class Publisher {
- // 单例模式
- // 1、连接工厂
- private ConnectionFactory connectionFactory;
- // 2、连接对象
- private Connection connection;
- // 3、Session对象
- private Session session;
- // 4、生产者
- private MessageProducer messageProducer;
- public Publisher() {
- try {
- this.connectionFactory = new ActiveMQConnectionFactory("zhangsan",
- "123", "tcp://localhost:61616");
- this.connection = connectionFactory.createConnection();
- this.connection.start();
- // 不使用事务
- // 设置客户端签收模式
- this.session = this.connection.createSession(false,
- Session.AUTO_ACKNOWLEDGE);
- this.messageProducer = this.session.createProducer(null);
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- public Session getSession() {
- return this.session;
- }
- public void send1(/* String QueueName, Message message */) {
- try {
- Destination destination = this.session.createTopic("topic1");
- MapMessage msg1 = this.session.createMapMessage();
- msg1.setString("name", "张三");
- msg1.setInt("age", 22);
- MapMessage msg2 = this.session.createMapMessage();
- msg2.setString("name", "李四");
- msg2.setInt("age", 25);
- MapMessage msg3 = this.session.createMapMessage();
- msg3.setString("name", "张三");
- msg3.setInt("age", 30);
- // 发送消息到topic1
- this.messageProducer.send(destination, msg1,
- DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
- this.messageProducer.send(destination, msg2,
- DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
- this.messageProducer.send(destination, msg3,
- DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- public void send2() {
- try {
- Destination destination = this.session.createTopic("topic1");
- TextMessage message = this.session.createTextMessage("我是一个字符串");
- // 发送消息
- this.messageProducer.send(destination, message,
- DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- public static void main(String[] args) {
- Publisher producer = new Publisher();
- producer.send1();
- }
- }
Subscribe的代码:
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import javax.jms.Message;
- import javax.jms.MessageConsumer;
- import javax.jms.MessageListener;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq.ActiveMQConnectionFactory;
- public class Subscriber {
- // 单例模式
- // 1、连接工厂
- private ConnectionFactory connectionFactory;
- // 2、连接对象
- private Connection connection;
- // 3、Session对象
- private Session session;
- // 4、生产者
- private MessageConsumer messageConsumer;
- // 5、目的地址
- private Destination destination;
- public Subscriber() {
- try {
- this.connectionFactory = new ActiveMQConnectionFactory("zhangsan",
- "123", "tcp://localhost:61616");
- this.connection = connectionFactory.createConnection();
- this.connection.start();
- // 不使用事务
- // 设置客户端签收模式
- this.session = this.connection.createSession(false,
- Session.AUTO_ACKNOWLEDGE);
- this.destination = this.session.createTopic("topic1");
- this.messageConsumer = this.session.createConsumer(destination);
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- public Session getSession() {
- return this.session;
- }
- // 用于监听消息队列的消息
- class MyLister implements MessageListener {
- @Override
- public void onMessage(Message message) {
- try {
- if (message instanceof TextMessage) {
- }
- if (message instanceof MapMessage) {
- MapMessage ret = (MapMessage) message;
- System.out.println(ret.toString());
- System.out.println(ret.getString("name"));
- System.out.println(ret.getInt("age"));
- // 因为设置的是客户端的签收模式,所以要手动的去确认消息的消费
- message.acknowledge();
- }
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- }
- // 用于异步监听消息
- public void receiver() {
- try {
- this.messageConsumer.setMessageListener(new MyLister());
- } catch (JMSException e) {
- throw new RuntimeException(e);
- }
- }
- public static void main(String[] args) {
- Subscriber conmuser = new Subscriber();
- conmuser.receiver();
- }
- }



先启动消费者(先订阅后消费),再启动发布者

JMS-activeMq发布订阅模式(非持久订阅)的更多相关文章
- ActiveMQ queue和topic,持久订阅和非持久订阅
消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者).queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者. ...
- activemq订阅发布模式(非持久订阅)
生产者JMSProducer: package com.sun.test.aircraft.activemq.topic; import org.apache.activemq.ActiveMQCon ...
- JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...
- JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...
- JMS ActiveMQ研究文档
1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...
- ActiveMQ两种模式PTP和PUB/SUB<转>
1.PTP模型 PTP(Point-to-Point)模型是基于队列(Queue)的,对于PTP消息模型而言,它的消息目的是一个消息队列(Queue),消息生产者每次发送消息总是把消息送入消息队列中, ...
- ActiveMQ 事务、集群、持久订阅者、ActiveMQ监控
JMS介绍 JMS是什么? JMS的全称Java Message Service,既Java消息服务. JMS是SUN提供的旨在统一各种MOM(Message-Oriented Middleware) ...
- ActiveMQ 持久订阅者,执行结果与初衷相违背,验证离线订阅者无效,问题解决
导读 最新在接触ActiveMQ,里面有个持久订阅者模块,功能是怎么样也演示不出来效果.配置参数比较简单(配置没几个参数),消费者第一次运行时,需要指定ClientID(此时Broker已经记录离线订 ...
- js设计模式-发布/订阅模式
一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户 ...
随机推荐
- RedHat修改系统时区
http://blog.itpub.net/27099995/viewspace-1370723/ 今天又被开发的说服务器时间异常,时差很大.我就纳闷了,上个星期都调整过的.去查看了一下. [root ...
- 在oracle官网上,找到我们所需版本的jdk
oracle的官网,因为都是英文,而且内容还特别多,经常的找不到历史版本的JDK. 特地,将找历史版本JDK的方法记录下来. 访问:http://www.oracle.com/technetwork/ ...
- docker从零开始 存储(二)volumes 挂载
使用volumes 卷是保存Docker容器生成和使用的数据的首选机制.mount binds依赖于主机的目录结构,而卷完全由Docker管理.卷绑定安装有几个优点: 与绑定装入相比,卷更易于备份或迁 ...
- JavaScript 之 定时器 延迟器
1:setTimeout("function()",time) setTimeout("function()",time) 设置一个超时对象,执行到到该代码时会 ...
- ES6的特性(译+注解)
介绍 ES6,也叫ECMAScript2015(以下统称ES6),是ECMAScript标准的最新版本.这个标准在2015年6月份被正式批准.ES6是js语言很有意义的一次更新,也是2009年ES5被 ...
- [centos6.5]添加eclipse快捷方式
[Desktop Entry] Version=buzhidao Encoding=UTF-8 Name=eclipse Comment=eclipse-for-php Exec=/opt/eclip ...
- HDU 1856 More is better (并查集)
题意: 给你两个数代表这两个人是朋友,朋友的朋友还是朋友~~,问这些人组成的集合里面人最多的是多少... 思路: 属于并查集了,我用的是带路径压缩的,一个集合里面所有元素(除了根节点)的父节点都是根节 ...
- 【LeetCode刷题】SQL-Combine Two Tables
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- 潜伏者(noip09年t1)解题报告 C++
题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...
- hdu6059( Trie )
hdu6059 题意 给定数组 \(A\) ,问有多少对下标 \((i, j, k)\) 满足 \(i < j < k\) 且 \((A[i] \ xor \ A[j]) < (A[ ...