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. Windows核心编程:第4章 进程

    Github https://github.com/gongluck/Windows-Core-Program.git //第4章 进程.cpp: 定义应用程序的入口点. // #include &q ...

  2. AngularJs创建自定义Service

    AngularJs可以创建自定义的service.下面的自定义service实现一个double倍数的服务: 参考下面语法: app.service('double', function () { t ...

  3. DS博客作业03—栈和队列

    1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...

  4. 小猴打架(luogu4430)(数论+生成树计数)

    一开始森林里面有\(N\)只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过\(N-1\)次打架之后,整个森林的小猴 ...

  5. CGI + FastCGI(PHP-FPM)联系与区别 【图解 + 注释】

    〇.背景 参考了几篇文章,总结成 图解 + 注释 方便以后查阅. 参考资料: 1.https://www.zhihu.com/question/19582041 2.https://segmentfa ...

  6. 使用IEDA远程调试

    下面演示在docker中调试代码. 使用vulhub作为演示. 下载vulhub,进入vulhub/fastjson/vuln/ 编辑docker-compose.yml ,在最后新建一行加入  - ...

  7. WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探

    Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事, ...

  8. [Leetcode]146.LRU缓存机制

    Leetcode难题,题目为: 运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key ...

  9. 坑爹的Sun JDK

    Sun的这个java.lang.Throwable 源码 设计非常糟糕,完全没有扩展性, 我在IBM 的Java JDK下,继承java.lang.Throwable重新定义了一个ExceptionW ...

  10. 这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了

    这两周服务器被攻击,封锁了600多个IP地址段后今天服务器安静多了 建议大家在自己的服务器上也封杀这些瘪三的地址 iptables -I INPUT -s 123.44.55.0/24 -j DROP ...