ActiveMQ常用API详解

本文详细解析了ActiveMQ的API,包括ConnectionFactory、Connection、Session、Destination、MessageProducer、MessageConsumer和Message等核心组件的使用方法及参数配置。深入探讨了消息的发送、接收机制,以及如何创建不同类型的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActiveMQ 常用API详解

  1. ActiveMQConnectionFactory
    客户端通过创建ConnectionFactory创建到ActiveMQ的连接,一个连接工厂封装了一组连接配置参数,这组参数在配置ActiveMQ时已经定义,例如brokerURL参数,此参数传入的是ActiveMQ的服务地址和端口,
    支持openwire协议的默认连接是tcp://localhost:61616,支持stomp协议的默认连接是tcp://localhost:61613(C++)
Java中ActiveMQConnectionFactory的构造方法有:

ActiveMQConnectionFactory();
ActiveMQConnectionFactory(String brokerURL);
ActiveMQConnectionFactory(String userName, String password, String brokerURL) ;      
ActiveMQConnectionFactory(String userName, String password, URI brokerURL) ;
ActiveMQConnectionFactory(URI brokerURL);
  1. Connection
    在成功创建ConnectionFactory之后,下一步将创建一个连接。
    当一个connection被创建之后,它的传输默认是关闭的,需要调用start()开启。一个connection可以创建一个或者多个session。
    当一个程序执行完之后,必须关闭之前创建的connection,调用close(),否则ActiveMQ不能释放资源,关闭connection同样也关闭了session,MessageProducer和MessageConsumer
ActiveMQConnectionFactory方法:

Connection createConnection();
Connection createConnection(String userName, String password);
  1. Session
    通过connection创建一个或者多个Session。Session是一个发送或者接收消息的线程,可以使用Session创建MessageProducer,MessageConsumer和Message。通过connection创建一个或者多个Session。Session是一个发送或者接收消息的线程,可以使用Session创建MessageProducer,MessageConsumer和Message。
ActiveMQConnection方法:

Session createSession(boolean transacted, int acknowledgeMode);

其中transacted为使用事务标识,acknowledgeMode为签收模式。
签收模式有三种:
Session.AUTO_ACKNOWLEDGE:为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。
Session.CLIENT_ACKNOWLEDGE:为客户确认,客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。
在这种情况下,签收发生在Session层面,签收一个已经消费的消息会自动签收这个Session所有已消费的收条。
Session.DUPS_OK_ACKNOWLEDGE :允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。Session 不必确保对传送消息的签收,它可能引起消息的重复,但是降低了session的开销,只有客户端能容忍重复的消息,才可使用。

  1. Destination
    Destination是一个客户端用来指定生产消息目标和消费信息来源的对象。
    在PTP模式中,Destination被称为Queue,在Pub/Sub(生产/订阅模式)中,Destination就被称为Topic(主题),在程序中可以使用多个Queue和Topic。
ActiveMQSession方法:

Queue createQueue(String queueName);
TemporaryQueue createTemporaryQueue();
Topic createTopic(String topicName);
TemporaryTopic createTemporaryTopic();
  1. MessageProducer
    MessageProducer是一个由session创建的对象,用来向Destination发送消息。
MessageProducer createProducer(Destination destination);
例如:
MessageProducer producer = session.createProducer(destination);

发送消息

ActiveMQMessageProducer方法:

void send(Destination destination, Message message);
void send(Destination destination, Message message, int deliveryMode, int priority,
long timeToLive);
void send(Message message);
void send(Message message, int deliveryMode, int priority, long timeToLive);
其中deliveryMode为传送模式,priority为消息优先级,timeToLive为消息过期时间。
  1. MessageConsumer
    MessageConsumer是一个由session创建的对象,用来从Destination接收消息。
ActiveMQSession方法:

MessageConsumer createConsumer(Destination destination);
MessageConsumer createConsumer(Destination destination, String messageSelector); 
MessageConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal);
TopicSubscriber createDurableSubscriber(Topic topic, String name);
//messageSelector 为消息选择器,noLocal标志默认为false,当设置为true时,限制消费者只能接收和自己相同的连接发布的消息,此标志只适用于主题,不适用于队列
TopicSubscriber createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal);

消息的同步接收和异步接收
消息的同步接收是指客户端调用receive方法去主动接收消息,
消息的异步接收是指当消息到达时,ActiveMQ主动通知客户端。客户端可以通过注册一个实现MessageListener接口的对象到MessageConsumer。MessageListener只有一个必须实现的方法–>onMessage,它只接收一个参数,既Message。在为每个发送到Destination的消息实现onMessage时,将调用该方法。

ActiveMQMessageConsumer方法:

Message receive()
Message receive(long timeout)
Message receiveNoWait()
或者
实现MessageListener接口,每当消息到达时,ActiveMQ会调用MessageListener中的onMessage 函数。
  1. Message
    JMS程序的最终目的是生产和消费的信息能被其他程序使用,JMS的Message是一个既简单又不乏灵活性的基本格式,允许创建不同平台上符合非JMS程序格式的消息。
    Message由以下部分组成:消息头,属性和消息体。
ActiveMQSession方法:

BlobMessage createBlobMessage(File file)
BlobMessage createBlobMessage(InputStream in)
BlobMessage createBlobMessage(URL url)
BlobMessage createBlobMessage(URL url, boolean deletedByBroker)
BytesMessage createBytesMessage()
MapMessage createMapMessage()
Message createMessage()
ObjectMessage createObjectMessage()
ObjectMessage createObjectMessage(Serializable object)
TextMessage createTextMessage()
TextMessage createTextMessage(String text)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值