一、RabbitMQ簡介
RabbitMQ是一種開源、快速、可靠的消息隊列系統,可以用來處理異步消息發佈/訂閱、任務分發解耦、零散消息傳遞等。它是由Erlang語言開發的,因此非常適合處理高並發、分佈式、可擴展的應用場景。
二、Spring AMQP簡介
Spring AMQP是Spring框架對RabbitMQ組件的支持,Spring AMQP提供了一套操作RabbitMQ的API,使得我們可以方便地在Spring應用中使用RabbitMQ。其中,RabbitListener就是Spring AMQP中用來實現消息消費的註解。
三、使用RabbitListener進行消息消費
要使用RabbitListener進行消息消費,需要完成以下幾個步驟:
- 使用RabbitTemplate發送消息到Exchange中
- 在對應的listener方法上添加@RabbitListener註解,並設置消費的隊列名
- 在listener方法中處理消息並返回一個值
四、代碼示例
下面我們來看一下如何使用RabbitListener註解進行消息消費的代碼示例。
1、配置RabbitTemplate
首先,我們需要配置一個RabbitTemplate來發送消息到Exchange中。在配置文件中添加以下代碼:
@SpringBootApplication public class RabbitMQApplication { public static void main(String[] args) { SpringApplication.run(RabbitMQApplication.class, args); } @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } }
2、定義消息實體類
接着,我們需要定義一個實體類來存儲消息體。這裡我們定義一個名為Order的類,包含訂單號和訂單金額兩個屬性。
public class Order { private String orderId; private BigDecimal amount; // 省略getter和setter方法 @Override public String toString() { return "Order{" + "orderId='" + orderId + '\'' + ", amount=" + amount + '}'; } }
3、發送消息到Exchange
接下來,我們需要使用RabbitTemplate發送消息到Exchange中。這裡我們將消息體設置為一個Order對象,目標Exchange為「order-exchange」,路由鍵為「order」。在發送消息之前,我們需要先定義一個Exchange,代碼如下:
@Configuration public class RabbitConfig { @Bean public DirectExchange orderExchange() { return new DirectExchange("order-exchange"); } @Bean public Queue orderQueue() { return new Queue("order-queue"); } @Bean public Binding orderBinding(DirectExchange orderExchange, Queue orderQueue) { return BindingBuilder.bind(orderQueue).to(orderExchange).with("order"); } }
在發送完消息之後,我們可以在控制台看到如下輸出:
Sending order message: Order{orderId='20200101001', amount=109.99}
4、使用RabbitListener消費消息
現在,我們已經成功發送了一個Order對象到Exchange中。接下來,我們需要編寫一個消費者來處理這個消息。這裡我們使用RabbitListener註解來消費消息。代碼如下:
@Component public class OrderConsumer { private static final Logger LOGGER = LoggerFactory.getLogger(OrderConsumer.class); @RabbitListener(queues = "order-queue") public Order receiveOrder(Order order) { LOGGER.info("Received order message: {}", order); order.setAmount(order.getAmount().multiply(BigDecimal.valueOf(0.9))); LOGGER.info("Processed order message: {}", order); return order; } }
在消費完消息之後,我們可以在控制台看到如下輸出:
Received order message: Order{orderId='20200101001', amount=109.99} Processed order message: Order{orderId='20200101001', amount=98.991}
由上述代碼可以看出,接收到消息後,我們在處理完消息之後,又將Order對象返回了。這是因為RabbitListener註解需要我們返回一個值,以便將返回值發送給下游組件。
五、總結
通過上述步驟,我們成功地使用RabbitListener註解實現了RabbitMQ的消息消費。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238054.html