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:一定要先运行一次,等于向消息服务中间件注册这个消费者,然后再运行客户端发送信息,这个时候,无论消费者是否在线,

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

时间: 2024-08-23 13:18:59

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

Moneybookers API支付方式开发 步骤

开发文档: 支付说明手册 步骤: 1.使用商家帐号,登录到www.moneybookers.com,核对商家信息是否正确. 2.在账户-->商家工具(设置) a.API/MQI password:这个pwd的设置,是用在接口中,用于二次验证订单的真实性要用到.(可选,非必须) b. 在同一个页面中,Secret word(密钥)的设置,在顶部.注意程度是10,必须是小写,同时不能包含一些特殊字符.(必须填写,接口要用到) 3.准备工作已经OK,现在就可以写API了. a.组合FORM表单,提交交

【AngularJS学习笔记】开发时候的建议目录结构,基本开发步骤

项目目录结构划分 Debug Node.JS的生成目录 Node_modules Node.Js的依赖项 Src 项目源文件 ----|framework  项目框架 --------|app --------|css --------|data --------|font --------|img --------|js --------|plugin ----|modules --------|父菜单中填写的module名,父节点 ------------|app 主要项目文件 ------

ebay的api的开发技术笔记,有点乱

使用eBay API基本步骤介绍 要开始使用eBay API,需要如下基本步骤: 1.    注册开发帐号: https://developer.ebay.com/join/Default.aspx 2.    选择API类型: eBay有大约6种API 开发语言,例如.net和Java的SDK http://developer.ebay.com/products/trading/ http://developer.ebay.com/products/overview/api-by-featur

ActiveMQ:JMS开源框架入门介绍

介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点: 基本的JMS概念 JMS的消息模式 介绍ActiveMQ 一个基于ActiveMQ的JMS例子程序 一:JMS基本概念 1. JMS的目标 为企业级的应用提供一种智能的消息系统,JMS定义了一整套的企业级的消息概念与工具,尽可能最小化的Java语言概念去构建最大化企业消息应用.统一已经存在的企业级消息系统功能. 2. 提供者 JMS提供者是指那些完全完成JMS功能与管理功能的JMS消息厂商,理论上JMS提供者完成.

使用activeMQ实现jms

一:jms介绍         jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现,然后使用者使用他们的jar包进行开发使用即可.        另外在jms的API中,jms传递消息有两种方式,一种是点对点的Queue,还有一个是发布订阅的Topic方式.区别在于:        对于Queue模式,一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者

WebService的开发步骤

WebService的开发要追究于SOA的发展. 软件开发从面向过程到面向对象 到面向服务.在今天说WebService之前,我想先简单说一下什么是面向服务(SOA). 以上面这张图来看,可以看出面向服务结构是一个组件模型, 它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来. 这样做的特点是 每个服务都有明确的边界.各个服务之间相互独立,并且采用标准的契约定义和通信协议. 基于这样的基础上,我们的WebService的开发就分为三步. 一 创建一个Web服务.

struts2学习笔记2 -struts2的开发步骤和工作原理

struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现action接口,或继承actionsupport类 b 为每个请求参数都提供feild,并为之提供相应的setter和getter方法 c 该action类应该有无参数构造器 3.配置action类 所有action都需要放在package里配置. <action>元素有如下属性: name 指定该act

Android_app项目开发步骤总结

做了几个android企业应用项目后,总结了项目的基本开发步骤.希望可以交流. 一 应用规划: ※确定功能. ※必须的界面及界面跳转的流程. ※须要的数据及数据的来源及格式. ※是否须要服务端支持. ※是否须要本地数据库支持. ※是否须要特殊权限. ※是否须要后台服务. 二 架构设计: ※分层. ※网络连接. ※数据处理-xml.domain. ※封装Activity. 三 界面设计: ※主界面确定. ※模块界面.列表.查看.编辑界面. ※菜单.button.对话框.提示信息. ※界面整体颜色.

微信硬件开发步骤

微信硬件开发步骤 一. 组册微信测试号 1. 首先登录http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,然后进行组册,可以申请到一个测试号 2. 填写调试时候的接口配置信息,这样调试的时候微信后台发来的信息都会传送到这个指定的URL网页上面 这里的token相当于一种验证码,可以随意设置,只要与后面自己编写的用来响应微信后台的PHP代码里面的token值一致就可以,类似于一种加密的措施. 二. 注册一台云服务器 由第一步我