Publisher的代码:

  1. import javax.jms.Connection;
  2. import javax.jms.ConnectionFactory;
  3. import javax.jms.DeliveryMode;
  4. import javax.jms.Destination;
  5. import javax.jms.JMSException;
  6. import javax.jms.MapMessage;
  7. import javax.jms.MessageProducer;
  8. import javax.jms.Session;
  9. import javax.jms.TextMessage;
  10. import org.apache.activemq.ActiveMQConnectionFactory;
  11. public class Publisher {
  12. // 单例模式
  13. // 1、连接工厂
  14. private ConnectionFactory connectionFactory;
  15. // 2、连接对象
  16. private Connection connection;
  17. // 3、Session对象
  18. private Session session;
  19. // 4、生产者
  20. private MessageProducer messageProducer;
  21. public Publisher() {
  22. try {
  23. this.connectionFactory = new ActiveMQConnectionFactory("zhangsan",
  24. "123", "tcp://localhost:61616");
  25. this.connection = connectionFactory.createConnection();
  26. this.connection.start();
  27. // 不使用事务
  28. // 设置客户端签收模式
  29. this.session = this.connection.createSession(false,
  30. Session.AUTO_ACKNOWLEDGE);
  31. this.messageProducer = this.session.createProducer(null);
  32. } catch (JMSException e) {
  33. throw new RuntimeException(e);
  34. }
  35. }
  36. public Session getSession() {
  37. return this.session;
  38. }
  39. public void send1(/* String QueueName, Message message */) {
  40. try {
  41. Destination destination = this.session.createTopic("topic1");
  42. MapMessage msg1 = this.session.createMapMessage();
  43. msg1.setString("name", "张三");
  44. msg1.setInt("age", 22);
  45. MapMessage msg2 = this.session.createMapMessage();
  46. msg2.setString("name", "李四");
  47. msg2.setInt("age", 25);
  48. MapMessage msg3 = this.session.createMapMessage();
  49. msg3.setString("name", "张三");
  50. msg3.setInt("age", 30);
  51. // 发送消息到topic1
  52. this.messageProducer.send(destination, msg1,
  53. DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
  54. this.messageProducer.send(destination, msg2,
  55. DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
  56. this.messageProducer.send(destination, msg3,
  57. DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
  58. } catch (JMSException e) {
  59. throw new RuntimeException(e);
  60. }
  61. }
  62. public void send2() {
  63. try {
  64. Destination destination = this.session.createTopic("topic1");
  65. TextMessage message = this.session.createTextMessage("我是一个字符串");
  66. // 发送消息
  67. this.messageProducer.send(destination, message,
  68. DeliveryMode.NON_PERSISTENT, 4, 1000 * 60 * 10);
  69. } catch (JMSException e) {
  70. throw new RuntimeException(e);
  71. }
  72. }
  73. public static void main(String[] args) {
  74. Publisher producer = new Publisher();
  75. producer.send1();
  76. }
  77. }

Subscribe的代码:

  1. import javax.jms.Connection;
  2. import javax.jms.ConnectionFactory;
  3. import javax.jms.Destination;
  4. import javax.jms.JMSException;
  5. import javax.jms.MapMessage;
  6. import javax.jms.Message;
  7. import javax.jms.MessageConsumer;
  8. import javax.jms.MessageListener;
  9. import javax.jms.Session;
  10. import javax.jms.TextMessage;
  11. import org.apache.activemq.ActiveMQConnectionFactory;
  12. public class Subscriber {
  13. // 单例模式
  14. // 1、连接工厂
  15. private ConnectionFactory connectionFactory;
  16. // 2、连接对象
  17. private Connection connection;
  18. // 3、Session对象
  19. private Session session;
  20. // 4、生产者
  21. private MessageConsumer messageConsumer;
  22. // 5、目的地址
  23. private Destination destination;
  24. public Subscriber() {
  25. try {
  26. this.connectionFactory = new ActiveMQConnectionFactory("zhangsan",
  27. "123", "tcp://localhost:61616");
  28. this.connection = connectionFactory.createConnection();
  29. this.connection.start();
  30. // 不使用事务
  31. // 设置客户端签收模式
  32. this.session = this.connection.createSession(false,
  33. Session.AUTO_ACKNOWLEDGE);
  34. this.destination = this.session.createTopic("topic1");
  35. this.messageConsumer = this.session.createConsumer(destination);
  36. } catch (JMSException e) {
  37. throw new RuntimeException(e);
  38. }
  39. }
  40. public Session getSession() {
  41. return this.session;
  42. }
  43. // 用于监听消息队列的消息
  44. class MyLister implements MessageListener {
  45. @Override
  46. public void onMessage(Message message) {
  47. try {
  48. if (message instanceof TextMessage) {
  49. }
  50. if (message instanceof MapMessage) {
  51. MapMessage ret = (MapMessage) message;
  52. System.out.println(ret.toString());
  53. System.out.println(ret.getString("name"));
  54. System.out.println(ret.getInt("age"));
  55. // 因为设置的是客户端的签收模式,所以要手动的去确认消息的消费
  56. message.acknowledge();
  57. }
  58. } catch (JMSException e) {
  59. throw new RuntimeException(e);
  60. }
  61. }
  62. }
  63. // 用于异步监听消息
  64. public void receiver() {
  65. try {
  66. this.messageConsumer.setMessageListener(new MyLister());
  67. } catch (JMSException e) {
  68. throw new RuntimeException(e);
  69. }
  70. }
  71. public static void main(String[] args) {
  72. Subscriber conmuser = new Subscriber();
  73. conmuser.receiver();
  74. }
  75. }

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

JMS-activeMq发布订阅模式(非持久订阅)的更多相关文章

  1. ActiveMQ queue和topic,持久订阅和非持久订阅

    消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者).queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者. ...

  2. activemq订阅发布模式(非持久订阅)

    生产者JMSProducer: package com.sun.test.aircraft.activemq.topic; import org.apache.activemq.ActiveMQCon ...

  3. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  4. JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略

    一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...

  5. JMS ActiveMQ研究文档

    1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...

  6. ActiveMQ两种模式PTP和PUB/SUB<转>

    1.PTP模型 PTP(Point-to-Point)模型是基于队列(Queue)的,对于PTP消息模型而言,它的消息目的是一个消息队列(Queue),消息生产者每次发送消息总是把消息送入消息队列中, ...

  7. ActiveMQ 事务、集群、持久订阅者、ActiveMQ监控

    JMS介绍 JMS是什么? JMS的全称Java Message Service,既Java消息服务. JMS是SUN提供的旨在统一各种MOM(Message-Oriented Middleware) ...

  8. ActiveMQ 持久订阅者,执行结果与初衷相违背,验证离线订阅者无效,问题解决

    导读 最新在接触ActiveMQ,里面有个持久订阅者模块,功能是怎么样也演示不出来效果.配置参数比较简单(配置没几个参数),消费者第一次运行时,需要指定ClientID(此时Broker已经记录离线订 ...

  9. js设计模式-发布/订阅模式

    一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户 ...

随机推荐

  1. 【bzoj1086】王室联邦

    我以为树分块什么的必有高论,结果居然是个暴力…… 方法也很简单,我看下每个节点dfs的时候是否已经大于k个,大于的话我就新开一块. 注意dfs的时候当前节点不能放进子树的块中. #include< ...

  2. 第三方库SDWebImage的原理

    关于SDWebImage,其实是不用懂原理的,只是有一些面试官会问,分享给正在找工作的朋友们: 不多说直接上图: 另外..... 我的愿望是....... 世界和平.........

  3. letsencrypt的证书转换上传到360网站防护方法

    命令:openssl 首先letsencrypt生成的证书在 letsencrypt/live/xxx.com/ 下,需要使用cert.pem和privkey.pem文件. 生成crt文件: open ...

  4. [ Python - 4 ] python 装饰器

    装饰器有很多经典的使用场景,例如插入日志.性能测试.事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的. 装饰器有两种写法: 1. 装饰器不传参数 2. 装 ...

  5. HUST-1350 Trie

    1350 - Trie 时间限制:1秒 内存限制:128兆 104 次提交 35 次通过 题目描述 In computer science, a trie, is an ordered tree da ...

  6. Docker Ubuntu容器安装ping(zz)

    更新apt-get的软件包信息,然后再安装 sudo docker run ubuntu apt-get update sudo docker run ubuntu apt-get install i ...

  7. Django-ContentType

    背景:学位课.专题课.价格策略(每一种课程(学位课和专题课下可分为不同的种类的课程)在不同学习时间内的价格不同) 例如:如何将课程表与价格策略表关联起来: 用外键是可以将课程表和价格策略表关联起来的, ...

  8. cmake 查找头文件和库文件顺序

    cmake会先到*_DIR里指定.cmake文件里去找找不到了才会到/usr里去找 所以要小心cmake给你找的文件,如果在一台电脑里装了不止一个版本库.

  9. 【hdoj_1050】Moving Tables

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1050 题意为: 为了叙述方便,把一个房间里面的桌子移动到另一个房间称为一个移动,给出若干个要求完成的移 ...

  10. linux上redis的安装与配置

    1.redis安装 wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar xzf redis-4.0.8.tar.gz ln -s ...