一、connection方法使用
1、创建connection时,它的传输默认是关闭的,必须使用start方法开启。一个connection可以创建多个session。
2、当一个程序执行完成后,必须关闭之前创建的connection,否则ActiveMQ不能释放资源。关闭Connection后,同时也关闭了Session\MessageProducer\MessageConsumer.
Connection connection = connectionFactory.createConnection();
Connection connection = connectionFactory.createConnection(String username,String password);
二、session方法使用
1、Session是一个发送消息的线程,可以使用session创建MessageProducer\MessageConsumer和Message.
Session session = connection.createSession(boolean transacted, int acknowledgeMode)
参数一:transacted是使用事务标识,结事事务有两种方法提交或者回滚。事务表求当一些数据被发送后,事务提交则消息被发送到MQ处理,在管控台才能看到数据,否则不能看到数据。最后必须使用Session.commit()方法提交事务
参数二:acknowledgeMode表示签收模式
Session.AUTO_ACKNOWLEDGE当消费者从receive或onMessage成都返回时,Session自动签收客户端的消息的收条。
Session.CLIENT_ACKNOWLEDGE消费者调用消息(Message)的msg.acknowledge();方法签收消息。这种情况下,签收发生在Session层面,签收一个已消费的消息会自动的签收这个Session所有已消费消息的收条
Session.DUPS_OK_ACKNOWLEDGE表示Session不必确保对传送消息的签收,它可能引起消息的重复,但降低了Session的开销,所以只有客户端能容重复消息才能使用。
三、MessageProducer
注:优先级需要activemq.xml配置
//一参 目标地址
//二参 具体数据信息
//三参 传送数据模式 :PERSISTENT和NON_PERSISTENT两种,不指定传送模式默认是持久性的。如果容忍消息丢失,使用非持久性消息可以改善性能和减少存储开销。
//四参 优先级:从0-9十个级别,0-4是普通消息,5-9是加急消息。不指定默认为4.JMS不要求严格按照十个优先级发送消息,但必须保单次加急消息要先于普通消息到达,不保证顺序消费机制。
//五参 消息过期时间:默认情况下,消息永不会过期。如果消息在特定周期内失去意义,那么可以设置过期时间,单位为毫秒。
producer.send(destination, message, deliveryMode, priority, timeToLive);
四、消息的独占
我们经常希望维持队列中的消息,按一定次序转发给消费者。然而当有多个JMS Session和消息消费者实例的从同一个队列中获取消息的时候,就不能保证消息顺序处理。因为消息被多个不同线程并发处理着。
在ActiveMQ4.x中可以采用Exclusive Consumer或者Exclusive Queues,避免这种情况,Broker会从消息队列中,一次发送消息给一个消息消费者来保证顺序。
配置如下:
queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
consumer = session.createConsumer(queue);
A. 当在接收信息的时候有一个或者多个备份接收消息者和一个独占消息者的同时接收时候,无论两者创建先后,在接收的时候,均为独占消息者接收。
B. 当在接收信息的时候,有多个独占消费者的时候,只有一个独占消费者可以接收到消息。
C. 当有多个备份消息者和多个独占消费者的时候,当所有的独占消费者均close的时候,只有一个备份消费者接到到消息。
备注:备份消费者为不带任何参数的消费者。
五,以前API示例
package com.mq.ActivemqAPI;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.spring.ActiveMQConnectionFactory;
/**
* Hello world!
*
*/
public class Sender {
public static void main( String[] args ) throws Exception
{
//建立connectionFactory工厂对象,填入用户名、密码以及要连接的地址,均使用默认即可,默认端口为"tcp://localhost:61616"
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
//通过connectionFactory工厂对象创建connection连接,并且调用connection的start方法开启连接,connection默认是关闭的
Connection connection = connectionFactory.createConnection("fu","fu");
connection.start();
//通过connection对象创建session会话(上下文环境对象),用于接收消息,参一表示是否启用事务,参二表示签收模式,一般我们设置自动签收。
Session session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
//通过session创建destination对象,指的是一个客户端用来指定生产消息目标和消费消息的来源的对象。
//在p2p模式中,destination被称作Queue即队列,在pub/sub模式中,destination被称作Topic即主题。
Destination destination = session.createQueue("first");
//通过session对象创建消息的发送/接收对象(生产者/消费者)MessageProducer/MessageConsumer
MessageProducer producer = session.createProducer(null);
for (int i = 0; i < 50; i++) {
//使用JMS规范的TextMessage形式创建数据(通过session对象),并用MessageProducer的send方法发送对象。同理客户端使用receive方法进行接收数据。最后关闭connection连接。
TextMessage msg = session.createTextMessage("消息内容"+i);
//一参 目标地址
//二参 具体数据信息
//三参 传送数据模式 :PERSISTENT和NON_PERSISTENT两种,不指定传送模式默认是持久性的。如果容忍消息丢失,使用非持久性消息可以改善性能和减少存储开销。
//四参 优先级:从0-9十个级别,0-4是普通消息,5-9是加急消息。不指定默认为4.JMS不要求严格按照十个优先级发送消息,但必须保单次加急消息要先于普通消息到达,不保证顺序消费机制。
//五参 消息过期时间:默认情况下,消息永不会过期。如果消息在特定周期内失去意义,那么可以设置过期时间,单位为毫秒。
producer.send(destination,msg);
}
//提交事务
session.commit();
//关闭连接
if(connection !=null){
connection.close();
}
}
}
public class Receiver {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
Connection connection = connectionFactory.createConnection("fu","fu");
connection.start();
//消费端启用事务和签收模式不启作用
Session session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createQueue("first");
// 通过session对象创建消息的发送/接收对象(生产者/消费者)MessageProducer/MessageConsumer
MessageConsumer consumer = session.createConsumer(destination);
while (true) {
// 使用JMS规范的TextMessage形式创建数据(通过session对象),并用MessageProducer的send方法发送对象。同理客户端使用receive方法进行接收数据。最后关闭connection连接。
TextMessage msg = (TextMessage) consumer.receive();
// 手工签收消息
msg.acknowledge();
System.out.println("消费数据:" + msg.getText());
}
}
}
分享到:
相关推荐
activeMQ api APACHE jms
在`activeMqApi.chm`文件中,你将找到关于这些接口和概念的详细说明,包括它们的使用方法、参数说明、返回值以及可能抛出的异常。这份文档是开发者学习和调试ActiveMQ应用程序的重要参考,它将帮助你理解和利用...
ActiveMQ API是开发者与ActiveMQ交互的主要接口,提供了丰富的功能来实现消息的发布/订阅、点对点通信以及事务处理等。 在ActiveMQ中,消息模型主要包括两种:点对点(Point-to-Point)和发布/订阅(Publish/...
在本文中,我们将深入探讨ActiveMQ Core 5.2.0.0-fuse API及其MessageQueue API。 一、ActiveMQ概述 ActiveMQ作为一款消息代理,它在应用程序之间扮演着消息传输的角色,支持点对点和发布/订阅两种消息模式。...
### ActiveMQ 开发文档知识点详解 #### 一、引言 随着分布式系统规模与复杂性的增加,传统的远程过程调用(RPC)中间件技术(如CORBA、DCOM、RMI等)逐渐暴露出局限性,例如同步通信、生命周期耦合等问题。针对...
ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 网盘地址:链接: https://pan.baidu.com/s/1nvOcn0l 密码: 4esh 话说怎么上传...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它的API提供了与消息系统交互的各种功能,广泛应用于分布式系统中。在ActiveMQ 5.2.0.0版本中,API进行了优化和增强,使得开发者能够更加方便地进行消息的生产...
包含翻译后的API文档:activemq-core-5.7.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.activemq,artifactId:activemq-core,version:5.7.0 使用方法:解压翻译后的API文档,用...
ActiveMQ Core API.chmActiveMQ Core API.chmActiveMQ Core API.chmActiveMQ Core API.chmActiveMQ Core API.chmActiveMQ Core API.chm
ActiveMQ Core API是Apache ActiveMQ项目的核心组件,它提供了一套用于构建消息传递应用程序的Java接口和类。ActiveMQ是一个开源的消息代理,它遵循开放消息中间件(OMM)标准,特别是Java Message Service(JMS)...
ActiveMQ 5.6.0 API帮助文档,chm格式
描述中提到的“com.activemq下是直接手发消息”,意味着可能有一个名为`com.activemq`的包,其中包含了直接使用ActiveMQ API发送消息的代码。这种情况下,开发者通常会创建一个ActiveMQ的Producer对象,通过它发送...
3. **文档**:可能有相关的API参考文档或者用户指南,帮助开发者理解和使用NMS ActiveMQ API。 4. **配置文件**:ActiveMQ通常需要配置文件来设置服务器行为,如broker.xml,这些文件可能会在压缩包中提供。 5. **...
5. 在应用程序中集成ActiveMQ API或使用JMS客户端发送和接收消息。 总之,Apache ActiveMQ是一个强大的消息中间件,它在分布式环境中提供了高效率、灵活性和可靠性,是构建分布式系统、微服务架构以及实现企业级...
`examples`文件夹包含了许多示例代码,这些代码用Java、C++、Python等语言编写,展示了如何使用ActiveMQ API发送和接收消息。你可以运行这些示例来快速体验ActiveMQ的功能。 ActiveMQ支持多种协议,包括OpenWire、...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递协议(Open Message Broker API,也称为JMS,Java消息服务)。ActiveMQ在分布式系统中起着至关重要的作用,它允许应用程序通过发送和接收...
在"activeMQHelloWorld"这个示例中,可能包含了一个简单的Java程序,展示了如何使用ActiveMQ API创建生产者和消费者,以及发送和接收文本消息的过程。这个例子可以帮助初学者理解ActiveMQ的基本用法和点对点消息模型...
在本例中,我们可能会看到一个简单的Java应用程序,演示如何使用ActiveMQ API创建生产者和消费者。生产者会创建一条消息,并通过连接到ActiveMQ服务器将其发送到一个特定的队列或主题。消费者则会在同一队列或主题上...
这两个类分别创建了连接,并使用ActiveMQ API来发送和接收消息。代码中可能会有测试方法来演示整个流程,例如创建一个消息,将其发送到队列,然后从队列中读取并打印出来。 为了更好地理解这个示例项目,你需要查看...
在ActiveMQ中,"client"指的是使用ActiveMQ API与消息中间件进行通信的应用程序,而"broker"则是ActiveMQ服务器,负责接收、存储和转发消息。Client和broker之间的交互基于多种协议,如开放消息传递接口(Open ...