ActiveMQ(05):JMS的API结构、开发步骤与Topic
一、JMS的API结构
二、一个JMS应用的基本步骤
1:创建一个JMS connection factory
2:通过connection factory来创建JMS connection
3:启动JMS connection
4:通过connection创建JMS session
5:创建JMS destination
6:创建JMS producer,或者创建JMS message,并设置destination
7:创建JMS consumer,或者是注册一个JMS message listener
8:发送或者接受JMS message(s)
9:关闭所有的JMS资源(connection, session, producer, consumer等)
三、topic
3.1 关于持久化和非持久化消息
持久化消息:
这是ActiveMQ的默认传送模式,此模式保证这些消息只被传送一次和成功使用一次。对于这些消息,可靠性是优先考虑的因素。
可靠性的另一个重要方面是确保持久性消息传送至目标后,消息服务在向消费者传送它们之前不会丢失这些消息。
这意味着在持久性消息传送至目标时,消息服务将其放入持久性数据存储。如果消息服务由于某种原因导致失败,它可以恢复
此消息并将此消息传送至相应的消费者。虽然这样增加了消息传送的开销,但却增加了可靠性。
非持久化消息:
保证这些消息最多被传送一次。对于这些消息,可靠性并非主要的考虑因素。 此模式并不要求持久性的数据存储,也不保证
消息服务由于某种原因导致失败后消息不会丢失。 有两种方法指定传送模式:
1.使用setDeliveryMode 方法,这样所有的消息都采用此传送模式; 如:
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
2.使用send 方法为每一条消息设置传送模式
3.2 非持久的Topic消息
3.2.1 消息的发送
基本跟前面发送队列信息是一样的,只是把创建Destination的地方,由创建队列替换成创建Topic,例如:
Destination destination = session.createTopic("my-topic");
3.2.1 消息的接收
1:必须要接收方在线,然后客户端再发送信息,接收方才能接收到消息
2:同样把创建Destination的地方,由创建队列替换成创建Topic,例如:
Destination destination = session.createTopic("my-topic");
3:由于不知道客户端发送多少信息,因此改成while循环的方式了,例如:
Message message = consumer.receive(); while(message!=null) { TextMessage txtMsg = (TextMessage)message; System.out.println("收到消 息:" + txtMsg.getText()); message = consumer.receive(1000L); }
3.3 持久的Topic消息
3.3.1 消息的发送
/**持久的*/ public void test2() throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("liuy","123456","tcp://192.168.91.8:61616"); Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE); Destination destination = session.createTopic("my-topic"); MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.PERSISTENT); // 设置DeliveryMode.PERSISTENT模式 connection.start(); for (int i = 0; i < 3; i++) { TextMessage message = session.createTextMessage("message22--" + i); producer.send(message); } session.commit(); session.close(); connection.close(); }
1:要用持久化订阅,发送消息者要用DeliveryMode.PERSISTENT模式发现,在连接之前设定
2:一定要设置完成后,再start这个connection
3.3.2 消息的接收
public void test2() throws Exception { ConnectionFactory cf = new ActiveMQConnectionFactory("liuy","123456","tcp://192.168.91.8:61616"); Connection connection = cf.createConnection(); connection.setClientID("cc1"); final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic("my-topic"); TopicSubscriber ts = session.createDurableSubscriber(topic, "T1"); connection.start(); Message message = ts.receive(); while(message!=null) { TextMessage txtMsg = (TextMessage)message; System.out.println("收到消息:" + txtMsg.getText()); message = ts.receive(1000L); } session.commit(); session.close(); connection.close(); }
1:需要在连接上设置消费者id,用来识别消费者
2:需要创建TopicSubscriber来订阅
3:要设置好了过后再start 这个 connection
4:一定要先运行一次,等于向消息服务中间件注册这个消费者,然后再运行客户端发送信息,这个时候,无论消费者是否在线,
都会接收到,不在线的话,下次连接的时候,会把没有收过的消息都接收下来。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
centos7.3的virbr0虚拟网络接口的关闭
在centos7.3里安装 Xen 或安装 KVM 后,会发现网络接口里多了一个叫做 virbr0 的虚拟网络接口,并且会自动获得一个私有地址。 这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器host上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。 大多数时候我们虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 bridge 是互不相干的)。 那么如何关掉这个 virbr0 呢? 我们可以先 net-destroy 然后 net-undefine,最后别忘了重启 libvirtd 让设置生效,这样就可以了。# virsh net-listName State Autostart--------------...
- 下一篇
Nginx、Apache2修改默认端口号
Ubuntu15.04 Nginx、Apache2修改默认端口号 通过Ubuntu 搭建WEB服务器,根据需求,有时候会需要修改web服务的端口号,这里我记录整理了Nginx和Apache修改默认端口号和网站目录的过程。 Nginx修改默认端口 1、修改配置文件 vi/etc/nginx/sites-enabled/default listen81default_server; #修改自己需要的端口号 listen81default_server; 2、重载Nginx服务 /etc/init.d/nginxreload 3、修改默认网站目录 vi/etc/nginx/sites-enabled/default #root/var/www/html; root/usr/share/nginx/html;#修改默认网站目录 4、修改默认主页文档: 修改或者替换index.html vi/usr/share/nginx/html/index.html#修改index.html Apache修改默认端口 1、修改配置文件 (1)修改 /etc/apache2/ports.conf 将 Name...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器