text_plain

RabbitMQ学习笔记(四、RabbitMQ队列)

放肆的年华 提交于 2020-05-02 01:20:39
目录: 消息路由失败了会怎样 备份交换器 TTL与DLX 如何实现延迟队列 RabbitMQ的RPC实现 持久化 事务 发送方确认机制 消息路由失败了会怎样: 在RabbitMQ中,如果消息路由失败了,一般会有两种情况。要么是把消息回退给客户端处理,要么就把消息丢弃。 处理逻辑是根据basicPublish方法的 mandatory 和 immediate 两个参数来控制。 1、 mandatory :当mandatory=true时,如果交换器无法根据自身类型和路由键匹配到符合条件的队列,便会调用Basic.Return命令将消息会推给生产者;当mandatory=false时,不满足条件则丢弃此条消息。 1 channel.addReturnListener( new ReturnListener() { 2 public void handleReturn( int replyCode, String replyText, String exchange, String routingKey, 3 AMQP.BasicProperties properties, byte [] body) throws IOException { 4 // 具体处理逻辑 5 } 6 }); 2、 immediate :当immediate=true时,交换器将消息路由到队列后

RabbitMQ生产者发送消息确认

删除回忆录丶 提交于 2020-04-27 07:28:51
在使用RabbitMQ的时候,可以通过消息的持久化操作来解决因为服务器的异常崩溃而导致的消息丢失,除此之外,我们还会遇到一个问题,当消息的生产者将消息发送出去以后,消息到底有没有到达服务器呢?如果不进行特殊的配置,默认情况下发送消息的操作是不会返回任何消息给生产者的,也就是默认情况下是不知道消息有没有正确地到达服务器。如果在消息到达服务器之前已经丢失,持久化操作也解决不了这个问题,因为消息根本没有到达服务器,何谈持久化? RabbitMQ针对这个问题,提供了两种解决方法:   ❤ 事务机制   ❤ 发送方确认机制 事务机制 RabbitMQ客户端中与事务机制相关的方法有三个:channel.txSelect、channel.txCommit、channel.txRollback。channel.txSelect用于将当前的信道设置成事务模式,channel.txCommit用于提交事务,channel.txRollback用于事务回滚。 在通过channel.txSelect方法开启事务之后,我们便可以发布消息给RabbitMQ了,如果事务提交成功,则消息一定到达了RabbitMQ中,如果在事务提交之前由于RabbitMQ异常崩溃或者其他的原因抛出异常,这个时候我们可以将其捕获,进而通过执行channel.txRollback方法来实现事务回滚。 部分示例代码如下:     

rabbitmq学习(三) —— 工作队列

一世执手 提交于 2020-04-26 19:04:59
工作队列,又称任务队列,主要思想是避免立即执行资源密集型任务,并且必须等待完成。相反地,我们进行任务调度,我们将一个任务封装成一个消息,并将其发送到队列。工作进行在后台运行不断的从队列中取出任务然后执行。当你运行了多个工作进程时,这些任务队列中的任务将会被工作进程共享执行。 这个概念在 Web 应用程序中特别有用,在短时间 HTTP 请求内需要执行复杂的任务。 准备工作 现在,假装我们很忙,我们使用 Thread.sleep 来模拟耗时的任务。 发送端 public class NewTask { private final static String QUEUE_NAME = "hello" ; public static void main(String[] args) throws IOException, TimeoutException { // 创建连接 ConnectionFactory factory = new ConnectionFactory(); // 设置 RabbitMQ 的主机名 factory.setHost("localhost" ); // 创建一个连接 Connection connection = factory.newConnection(); // 创建一个通道 Channel channel = connection

feign调用其他服务解码错误

倾然丶 夕夏残阳落幕 提交于 2020-04-25 08:10:47
1.在使用A服务通过feign调用B服务时报错: feign.codec.DecodeException: Error while extracting response for type [class com.epoch.bdp.flow.model.vo.runtime.WFTaskVO] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime` from String "2019-11-27 15:59:13": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2019-11-27 15:59:13' could not be parsed at index 10; nested exception is com.fasterxml.jackson.databind