一、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-tw/n/238054.html
微信掃一掃
支付寶掃一掃