ActiveMQ入门教程(四) - ActiveMQ Pub/Sub版的HelloWorld

2023-11-07 12:50

本文主要是介绍ActiveMQ入门教程(四) - ActiveMQ Pub/Sub版的HelloWorld,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么80%的码农都做不了架构师?>>>   hot3.png

在上一篇中,我们说了P2P版的HelloWorld,在这一篇,我们简要说一下,基于发布,订阅模式的HelloWorld。

基础知识就不在介绍了,需要的会一点一点讲。

1. pom.xml

这个和上一篇是一样的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.ygy</groupId><artifactId>activemq</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>activemq</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- activemq,学习中 --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>5.7.0</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.5.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.5.6</version></dependency></dependencies>
</project>

2. Pub/Sub版的HelloWorld

生产者:

package org.ygy.mq.lesson01;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;
import org.ygy.mq.constants.MQConstants;public class HelloTopicProducer {public void send(String msg) {// 生产者的主要流程Connection connection = null;try {// 1.初始化connection工厂,使用默认的URL// failover://tcp://localhost:61616ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();// 2.创建Connectionconnection = connectionFactory.createConnection();// 3.打开连接connection.start();// 4.创建Session,(是否支持事务)Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 5.创建消息目标Destination destination_send = session.createTopic(MQConstants.DESTINATION_SEND);// 6.创建生产者MessageProducer producer = session.createProducer(destination_send);// 7.配置消息是否持久化/** DeliverMode有2种方式:* * public interface DeliveryMode { static final int NON_PERSISTENT =* 1;//不持久化:服务器重启之后,消息销毁* * static final int PERSISTENT = 2;//持久化:服务器重启之后,该消息仍存在 }*/producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 8.初始化要发送的消息TextMessage message = session.createTextMessage(msg);// 9.发送消息producer.send(message);connection.close();} catch (JMSException e) {e.printStackTrace();}}public static void main(String[] args) {new HelloTopicProducer().send("我来试一试发布/订阅...");}}

消费者:

package org.ygy.mq.lesson01;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
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;
import org.ygy.mq.constants.MQConstants;public class HelloTopicConsumer implements MessageListener {@Overridepublic void onMessage(Message message) {if (message instanceof TextMessage) {TextMessage txtMsg = (TextMessage) message;try {System.out.println("哈,我接收到了消息:" + txtMsg.getText());} catch (JMSException e) {e.printStackTrace();}}}public void receive() {// 消费者的主要流程Connection connection = null;try {// 1.初始化connection工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();// 2.创建Connectionconnection = connectionFactory.createConnection();// 3.打开连接connection.start();// 4.创建sessionSession session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 5.创建消息目标Destination destination = session.createTopic(MQConstants.DESTINATION_SEND);// 6.创建消费者MessageConsumer consumer = session.createConsumer(destination);// 7.配置监听consumer.setMessageListener(new HelloTopicConsumer());} catch (JMSException e) {e.printStackTrace();}}public static void main(String[] args) {new HelloTopicConsumer().receive();}}

3.测试

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

单击那个Topics连接。

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

Name:主题的名称

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

Message Enqueued:进入消息队列的

Message Dequeued:出消息队列的

Operations:操作

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

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

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

我们的消费者一直在运行


接下来,运行生产者:

控制台会输出:

再一次,刷新界面:

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


在这里遇到了一个问题,就是运行顺序的问题,

我们如果先运行生产者,再运行消费者,消费者是接收不到消息的,郁闷了好久

猜想,应该是对概念,规范的理解出了问题,就找了一下,发现了原因:

这是上一篇介绍的JMS消息模型,哎,委屈,对概念的理解不清晰。

至于,持久的订阅,会在以后的博客中分享,HelloWorld,就到此结束了。


转载于:https://my.oschina.net/chaun/blog/404618

这篇关于ActiveMQ入门教程(四) - ActiveMQ Pub/Sub版的HelloWorld的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363742

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

ActiveMQ—安装配置及使用

安装配置及使用 转自:http://blog.csdn.net/qq_21033663/article/details/52461543 (一)ActiveMQ介绍 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了

ActiveMQ—Queue与Topic区别

Queue与Topic区别 转自:http://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型:         1、点对点(point-to-point,简称PTP)Queue消息传递模型:         通过该消息传递模型,一个应用程序(即消息生产者)可以

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

Weex入门教程之3,使用 Vue 开发 Weex 页面

环境安装 在这里简略地介绍下,详细看官方教程 Node.js 环境 Node.js官网 通常,安装了 Node.js 环境,npm 包管理工具也随之安装了。因此,直接使用 npm 来安装 weex-toolkit。 npm 是一个 JavaScript 包管理工具,它可以让开发者轻松共享和重用代码。Weex 很多依赖来自社区,同样,Weex 也将很多工具发布到社区方便开发者使用。

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Python简单入门教程helloworld

Python 学习资源 推荐书籍: Python核心编程(第二版) (强烈推荐,建议有一定基础的看,或者看完简明Python教程再看) Python 基础教程 第二版 (入门,没有核心编程好,但也不错) 编写高质量代码:改善Python程序的91个建议 (进阶,有一定基础再看) 书籍下载: Python 教程(部分内容来源于网络, 历时一年多总结整理的,给刚刚入门的

【超级干货】2天速成PyTorch深度学习入门教程,缓解研究生焦虑

3、cnn基础 卷积神经网络 输入层 —输入图片矩阵 输入层一般是 RGB 图像或单通道的灰度图像,图片像素值在[0,255],可以用矩阵表示图片 卷积层 —特征提取 人通过特征进行图像识别,根据左图直的笔画判断X,右图曲的笔画判断圆 卷积操作 激活层 —加强特征 池化层 —压缩数据 全连接层 —进行分类 输出层 —输出分类概率 4、基于LeNet