深入掌握JMS(七):DeliveryMode例子

    在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。

 
    运行上面的程序,当输出“Send messages sucessfully!”时,说明两个消息都已经发送成功,然后我们结束它,来停止JMS Provider。

    接下来我们重新启动JMS Provicer,然后添加一个消费者:


运行上面的程序,可以得到下面的输出结果:

Consumer get A persistent Message

可以看出消息消费者只接收到一个消息,它是一个Persistent的消息。而刚才发送的non persistent消息已经丢失了。

另外, 如果发送一个non persistent消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要保证RabbitMQ消息持久化,需要在以下几个方面进行配置: 1. Exchange和Queue的持久化:在RabbitMQ中,Exchange和Queue默认情况下是非持久化的,也就是说它们只存在于内存中,当RabbitMQ服务器重启时,这些非持久化的Exchange和Queue将被删除。为了实现Exchange和Queue的持久化,需要在创建Exchange和Queue时将其标记为持久化。 2. 消息的投递模式:消息持久化需要将消息先存储在磁盘上,然后再进行投递。因此,需要将消息的投递模式设置为"持久化"。 3. 消息的确认模式:为了确保消息被正确地投递并存储在磁盘上,需要启用消息的确认模式。消息确认模式有两种:Publisher Confirmation和Consumer Acknowledgement。 下面是保证RabbitMQ消息持久化的具体方法: 1. Exchange和Queue的持久化: ```java // 创建Exchange和Queue时设置为持久化 channel.exchangeDeclare("exchange_name", "direct", true); channel.queueDeclare("queue_name", true, false, false, null); // 将Queue绑定到Exchange上 channel.queueBind("queue_name", "exchange_name", "routing_key"); ``` 2. 消息的投递模式: ```java // 将消息设置为持久化 byte[] messageBytes = "Hello, RabbitMQ!".getBytes(); BasicProperties properties = new BasicProperties().builder() .deliveryMode(2) // 持久化消息 .build(); // 发送消息到持久化的Queue channel.basicPublish("exchange_name", "queue_name", properties, messageBytes); ``` 3. 消息的确认模式: ```java // 启用Publisher Confirmation模式 channel.confirmSelect(); // 发送消息到持久化的Queue,并等待确认 channel.basicPublish("exchange_name", "queue_name", properties, messageBytes); if (!channel.waitForConfirms()) { // 消息发送失败 System.out.println("Message send failed!"); } // 启用Consumer Acknowledgement模式 channel.basicConsume("queue_name", false, new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException { // 处理消息 // 发送确认消息 channel.basicAck(envelope.getDeliveryTag(), false); } }); ``` 需要注意的是,以上三个方面都需要进行配置才能保证RabbitMQ消息的持久化,并且在消费者处理消息时,需要发送确认消息来确认消息已经被消费。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值