消息中间件activeMQ(4)

消息总是从生产者发送到中间件再有中间件发送给消费者。

对于broker而言,消息的持久化的机制则用来处理消息在目的地阶段的安全隐患。

如果Producer选择不使用持久化,则消息缓存在内存中,虽然可以获得高吞吐率,但是一旦JMS Provider宕掉,就会导致消息的丢失。非持久化具有高吞吐量和低可靠性的特点。

如果Producer选择持久化,则JMS Provider会将消息存到物理媒介上(文件、数据库),Consumer获取消息,也是从物理媒介读取,吞吐量受到影响,但是即使JMS Provider宕掉,消息也不会丢失。持久化具有低吞吐量和高可靠性的特点。

针对持久化,JMS Provider可以提供多种持久化方案,比如持久化到本地文件、不同的数据库等,不过这些不是Producer需要关心的,Producer只需要告诉JMS Provider要不要持久化消息就好了。

持久化方案的选择,在%ActiveMQ_HOME%\conf\activemq.xml文件,<persistenceAdapter />元素下配置。

持久化设置:

javax.jms.MessageProducer:

setDeliveryMode(int):void
- 设置此producer实例的默认递送模式
send(Message message):void
- 以默认的deliveryMode发送消息
send(Message message, int deliveryMode, int priority, long timeToLive):void
- 以指定的deliveryMode发送消息


javax.jms.DeliveryMode

static int NON_PERSISTENT 
非持久化模式
static int PERSISTENT 
持久化模式

JMS规范定义了2种消息传输模式:持久传送模式和非持久传输模式。发送者可以通过如下类似的代码进行设置

TopicPublisher publihser = session.createPublisher(topic);
 
// 设置持久化传输
publihser.setDeliveryMode(DeliveryMode.PERSISTENT);
      这种方式对publisher发送的所有消息都有效,相当于是一个全局的效果。如果只是想设置某一个消息的传输模式,可以通过以下代码设置消息头的属性来实现

TextMessage message = session.createTextMessage(text);
		
message.setJMSDeliveryMode(DeliveryMode.PERSISTENT);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值