请通过浏览器功能收藏网页

activema常用概念:消息的 传送模式 优先级 过期时间 activemq

发布时间:2020-01-08 11:22:01  作者:本站编辑  来源:本站原创  浏览次数:
www.javainfo.com.cn 上干货 欢迎收藏

ActiveMQ支持两种消息传送模式:PERSISTENTNON_PERSISTENT两种。

1DeliveryMode.PERSISTENT(持久性消息):ActiveMQ的默认传送模式,此模式保证这些消息只被传送一次和成功使用一次。对于这些消息,可靠性是优先考虑的因素。可靠性的另一个重要方面是确保持久性消息传送至目标后,消息服务在向消费者传送它们之前不会丢失这些消息。这意味着在持久性消息传送至目标时,消息服务将其放入持久性数据存储。如果消息服务由于某种原因导致失败,它可以恢复此消息并将此消息传送至相应的消费者。虽然这样增加了消息传送的开销,但却增加了可靠性。

2DeliveryMode.NON_PERSISTENT(非持久性消息):保证这些消息最多被传送一次。对于这些消息,可靠性并非主要的考虑因素。此模式并不要求持久性的数据存储,也不保证消息服务由于某种原因导致失败后消息不会丢失。

有两种方法指定传送模式:

 

使用setDeliveryMode方法,这样所有的消息都采用此传送模式;

ActiveMQMessageProducer方法:针对消息生产者

void setDeliveryMode(int newDeliveryMode);  

 

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

void send(Destination destination, Message message, int deliveryMode, int priority,

long timeToLive);

void send(Message message, int deliveryMode, int priority, long timeToLive);

 

priority为消息优先级,timeToLive为消息过期时间。

 

producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

如果不指定传送模式,那么默认是持久性消息。如果容忍消息丢失,那么使用非持久性消息可以改善性能和减少存储的开销。

 

3  设置消息优先级
通常,可以确保将单个会话向目标发送的所有消息按其发送顺序传送至消费者。然而,如果为这些消息分配了不同的优先级,消息传送系统将首先尝试传送优先级较高的消息。

有两种方法设置消息的优先级:

1

使用setDeliveryMode方法,这样所有的消息都采用此传送模式;ActiveMQMessageProducer方法:void setPriority(int newDefaultPriority);

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

void send(Destination destination, Message message, int deliveryMode, int priority,

long timeToLive);

void send(Message message, int deliveryMode, int priority, long timeToLive);

priority为消息优先级,timeToLive为消息过期时间。

 

说明:消息优先级从0-9十个级别,0-4是普通消息,5-9是加急消息。如果不指定优先级,则默认为4JMS不要求严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。

 

4  允许消息过期
默认情况下,消息永不会过期。如果消息在特定周期内失去意义,那么可以设置过期时间。

有两种方法设置消息的过期时间,时间单位为毫秒:

1.使用setTimeToLive方法为所有的消息设置过期时间;

ActiveMQMessageProducer方法:

void setTimeToLive(long timeToLive);

2.使用send方法为每一条消息设置过期时间;

void send(Destination destination, Message message, int deliveryMode, int priority,

long timeToLive);

void send(Message message, int deliveryMode, int priority, long timeToLive);

其中deliveryMode为传送模式,priority为消息优先级,timeToLive为消息过期时间。

 

producer.setTimeToLive(1000); //毫秒数

消息过期时间,send 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。



如有疑问 请留言 欢迎提供建议

评论已有 0