1. pom.xml

这个和上一篇是一样的:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>org.ygy</groupId>
  5. <artifactId>activemq</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>activemq</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.10</version>
  18. <scope>test</scope>
  19. </dependency>
  20. <!-- activemq,学习中 -->
  21. <dependency>
  22. <groupId>org.apache.activemq</groupId>
  23. <artifactId>activemq-core</artifactId>
  24. <version>5.7.0</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.slf4j</groupId>
  28. <artifactId>slf4j-api</artifactId>
  29. <version>1.5.6</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.slf4j</groupId>
  33. <artifactId>slf4j-log4j12</artifactId>
  34. <version>1.5.6</version>
  35. </dependency>
  36. </dependencies>
  37. </project>

2. Pub/Sub版的HelloWorld

生产者:

  1. package org.ygy.mq.lesson01;
  2. import javax.jms.Connection;
  3. import javax.jms.ConnectionFactory;
  4. import javax.jms.DeliveryMode;
  5. import javax.jms.Destination;
  6. import javax.jms.JMSException;
  7. import javax.jms.MessageProducer;
  8. import javax.jms.Session;
  9. import javax.jms.TextMessage;
  10. import org.apache.activemq.ActiveMQConnectionFactory;
  11. import org.ygy.mq.constants.MQConstants;
  12. public class HelloTopicProducer {
  13. public void send(String msg) {
  14. // 生产者的主要流程
  15. Connection connection = null;
  16. try {
  17. // 1.初始化connection工厂,使用默认的URL
  18. // failover://tcp://localhost:61616
  19. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
  20. // 2.创建Connection
  21. connection = connectionFactory.createConnection();
  22. // 3.打开连接
  23. connection.start();
  24. // 4.创建Session,(是否支持事务)
  25. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  26. // 5.创建消息目标
  27. Destination destination_send = session.createTopic(MQConstants.DESTINATION_SEND);
  28. // 6.创建生产者
  29. MessageProducer producer = session.createProducer(destination_send);
  30. // 7.配置消息是否持久化
  31. /*
  32. * DeliverMode有2种方式:
  33. *
  34. * public interface DeliveryMode { static final int NON_PERSISTENT =
  35. * 1;//不持久化:服务器重启之后,消息销毁
  36. *
  37. * static final int PERSISTENT = 2;//持久化:服务器重启之后,该消息仍存在 }
  38. */
  39. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  40. // 8.初始化要发送的消息
  41. TextMessage message = session.createTextMessage(msg);
  42. // 9.发送消息
  43. producer.send(message);
  44. connection.close();
  45. } catch (JMSException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. public static void main(String[] args) {
  50. new HelloTopicProducer().send("我来试一试发布/订阅...");
  51. }
  52. }

消费者:

  1. package org.ygy.mq.lesson01;
  2. import javax.jms.Connection;
  3. import javax.jms.ConnectionFactory;
  4. import javax.jms.Destination;
  5. import javax.jms.JMSException;
  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. import org.ygy.mq.constants.MQConstants;
  13. public class HelloTopicConsumer implements MessageListener {
  14. @Override
  15. public void onMessage(Message message) {
  16. if (message instanceof TextMessage) {
  17. TextMessage txtMsg = (TextMessage) message;
  18. try {
  19. System.out.println("哈,我接收到了消息:" + txtMsg.getText());
  20. } catch (JMSException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }
  25. public void receive() {
  26. // 消费者的主要流程
  27. Connection connection = null;
  28. try {
  29. // 1.初始化connection工厂
  30. ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
  31. // 2.创建Connection
  32. connection = connectionFactory.createConnection();
  33. // 3.打开连接
  34. connection.start();
  35. // 4.创建session
  36. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  37. // 5.创建消息目标
  38. Destination destination = session.createTopic(MQConstants.DESTINATION_SEND);
  39. // 6.创建消费者
  40. MessageConsumer consumer = session.createConsumer(destination);
  41. // 7.配置监听
  42. consumer.setMessageListener(new HelloTopicConsumer());
  43. } catch (JMSException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47. public static void main(String[] args) {
  48. new HelloTopicConsumer().receive();
  49. }
  50. }

3.测试

访问网页:http://localhost:8161/admin/topics.jsp

单击那个Topics连接。

这里显示的是服务器上的主题,这些显示的都没有用,可以都删掉。

Name:主题的名称

Number Of Consumers:正在运行的消费者

Message Enqueued:进入消息队列的

Message Dequeued:出消息队列的

Operations:操作

下面就可以开始运行程序了,

注意顺序:先运行消费者:

这里会产生好几个主题,我们只看我们自己用的那个,(其实,其他几个是干嘛的,暂时还不清楚,以后再研究吧.....)

我们的消费者一直在运行

接下来,运行生产者:

控制台会输出:

再一次,刷新界面:

消费者还在运行,只生产了一条消息,而且已经被消费了。

ActiveMQ Pub/Sub版的HelloWorld的更多相关文章

  1. ActiveMQ P2P版的HelloWorld

    1.2 JMS应用程序接口 ConnectionFactory: 用户用来创建到JMS提供者的连接的被管对象.JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改. 管理员 ...

  2. Mina入门:mina版之HelloWorld

    一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式切入Mina入门学习了. 二,搭建项目结构与解决项目依赖 ...

  3. Mina入门:mina版之HelloWorld[z]

    Mina入门:mina版之HelloWorld [z] 一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式 ...

  4. ActiveMQ 入门Nodejs版

    ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...

  5. 初学tornado之MVC版helloworld

    作者:the5fire | 标签: MVC  tornado  | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...

  6. ActiveMQ 了解

    Active MQ 是JMS的一个具体实现,所以首先要对JMS有所了解. 1.       JMS: 定义:Java消息服务(Java Message Service),是Sun是提出来的为J2EE提 ...

  7. FreeMarker使用小记(HelloWorld)

    FreeMarker是开源的模板框架.对于它的介绍网上已经很多了.详情可参考主页:http://www.freemarker.org/ 现在我们就开始我们的FreeMarker版的Hello Worl ...

  8. Scala入门:从HelloWorld开始【源码及编译】

    最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大. 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程. 在刚刚开始读<Scala编程>的时 ...

  9. ActiveMQ安装与持久化消息

    activityMQ官网:http://activemq.apache.org/ 有windows版与linux版  windows版启动 在bin目录下双击activemq.bat linux版的安 ...

随机推荐

  1. What mind mapping software applications do you recommend.

    选自 https://members.iqmatrix.co/creative-mind-maps I personally use Mindjet MindManager. This is one ...

  2. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  3. 10 个免费的Bootstrap Admin 主题,模板收集

    In designing websites today, one of the must have frameworks is the twitter bootstrap. To those who ...

  4. Windwos下Tomcat的安装与配置

    一.准备工作 1. JDK环境,可参考https://www.cnblogs.com/eagle6688/p/7873477.html 2. Eclipse 3. Tomcat安装包和源码包 二.下载 ...

  5. redis集群(主从配置)

    市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redi ...

  6. SQLSERVER CXPACKET 等待

    --SQLSERVER CXPACKET 等待 2013-6-11 2 --联机丛书: 3 --当尝试同步查询处理器交换迭代器时出现.如果针对该等待类型的争用成为问题时,可以考虑降低并行度 4 5 6 ...

  7. python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  8. 【计算机网络】 网络体系结构分类: 客户机/服务器体系和P2P

    网络体系结构的分类 现代网络应用程序有两种主流的体系结构: 客户机/服务器体系结构和P2P体系结构(peer to peer “对等”)   一 . 客户机/服务器体系结构     客户机/服务器体系 ...

  9. TDateTimePicker中Date与Time的误导

    Delphi DateTime,Date,Time TDateTimePicker DateTimeDateTimeDateTimePicker 一.DateTime,Date,Time存储方式本质上 ...

  10. Linux正则与文本处理工具(10)

    正则表达式 (Regular Expression, RE, 或称为常规表达式)是通过一些特殊字符的排列,用于『查找/替换/删除』一行或多行文字或字符串,简单的说,正则表达式就是用在字串的处理上面的一 ...