ActiveMQ(05):JMS的API结构、开发步骤与Topic

简介:

一、JMS的API结构

wKioL1jsjRCjP-YVAAOyJkor_R0561.png

二、一个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 方法,这样所有的消息都采用此传送模式; 如:

1
     producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

  2.使用send 方法为每一条消息设置传送模式

3.2 非持久的Topic消息

3.2.1 消息的发送

基本跟前面发送队列信息是一样的,只是把创建Destination的地方,由创建队列替换成创建Topic,例如:

1
Destination destination = session.createTopic( "my-topic" );

3.2.1 消息的接收

1:必须要接收方在线,然后客户端再发送信息,接收方才能接收到消息

2:同样把创建Destination的地方,由创建队列替换成创建Topic,例如:

1
Destination destination = session.createTopic( "my-topic" );

3:由于不知道客户端发送多少信息,因此改成while循环的方式了,例如:

1
2
3
4
5
6
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 消息的发送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**持久的*/
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 消息的接收

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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:一定要先运行一次,等于向消息服务中间件注册这个消费者,然后再运行客户端发送信息,这个时候,无论消费者是否在线,

  都会接收到,不在线的话,下次连接的时候,会把没有收过的消息都接收下来。

本文转自我爱大金子博客51CTO博客,原文链接http://blog.51cto.com/1754966750/1914965如需转载请自行联系原作者


我爱大金子

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
44 6
|
5天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
33 6
|
10天前
|
JSON API 数据安全/隐私保护
淘宝评论API接口操作步骤详解,代码示例参考
淘宝评论API接口是淘宝开放平台提供的一项服务,通过该接口,开发者可以访问商品的用户评价和评论。这些评论通常包括评分、文字描述、图片或视频等内容。商家可以利用这些信息更好地了解消费者的需求和偏好,优化产品和服务。同时,消费者也可以从这些评论中获得准确的购买参考,做出更明智的购买决策。
|
7天前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
26 3
|
12天前
|
供应链 搜索推荐 API
探索1688榜单商品详细信息API接口:开发、应用与收益
本文深入探讨了1688榜单商品详细信息API接口的开发与应用,涵盖接口概述、开发条件、调用方法及数据处理等内容。该API帮助企业高效获取1688平台商品信息,应用于商品信息采集、校验、同步与数据分析等领域,有效提升了企业的运营效率、库存管理、销售转化率及市场策略制定能力,降低了采购成本,提升了客户满意度。
37 9
|
15天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
49 10
|
15天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
63 5
|
14天前
|
数据可视化 搜索推荐 API
速卖通获得aliexpress商品详情API接口的开发、应用与收益。
速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,为全球消费者提供丰富商品。其开放平台提供的API接口支持开发者获取商品详情等信息,本文探讨了速卖通商品详情API的开发流程、应用场景及潜在收益,包括提高运营效率、降低成本、增加收入和提升竞争力等方面。
32 1
|
1天前
|
存储 搜索推荐 API
小红书笔记详情API接口的开发、应用与收益
小红书笔记详情API接口为开发者、企业和内容创作者提供了获取平台丰富资源的通道。通过该接口,用户可以提取笔记的详细信息(如标题、正文、标签等),并应用于市场调研、竞品分析、内容创作、电商推荐等多个领域。这不仅有助于提升品牌影响力和优化用户体验,还能挖掘商业机会,促进内容创新,增强用户互动与社群凝聚力。总之,小红书笔记详情API接口为企业和个人在社交媒体领域探索新增长点提供了重要工具。
11 0
|
29天前
|
负载均衡 安全 API
小红书商品详情API接口获取步骤
获取小红书商品详情API接口需先注册账号并实名认证,阅读API文档后,通过编程语言调用API,构建请求参数,处理返回数据。确保应用支持高并发,遵守安全规范,申请API权限,查阅接口文档,进行开发调试。

热门文章

最新文章