java 消息中间件 mq_Java 搭建 RabbitMq 消息中间件

此博客主要展示了Java中RabbitMQ的订单队列配置代码。定义了订单缓冲交换机、延迟队列、DLX交换机和实际消费队列等,设置了队列过期时间,完成了交换机与队列的绑定,并创建了监听实际消费队列的容器,实现消息的有序处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 packagecom.tuohang.platform.config;2

3 importorg.springframework.amqp.core.Binding;4 importorg.springframework.amqp.core.BindingBuilder;5 importorg.springframework.amqp.core.DirectExchange;6 importorg.springframework.amqp.core.Queue;7 importorg.springframework.amqp.core.QueueBuilder;8 importorg.springframework.amqp.rabbit.connection.ConnectionFactory;9 importorg.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;10 importorg.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;11 importorg.springframework.context.annotation.Bean;12 importorg.springframework.context.annotation.Configuration;13

14

15 /**

16 * rabbitMQ的队列设置(生产者发送的消息,永远是先进入exchange,再通过路由,转发到队列)17 *18 *19 *@authorAdministrator20 *@version1.021 * @Date 2018年9月18日22 */

23 @Configuration24 public classOrderQueueConfig {25

26 /**

27 * 订单缓冲交换机名称28 */

29 public final static String ORDER_PRE_EXCHANGE_NAME = "order_pre_exchange";30

31 /**

32 * 发送到该队列的message会在一段时间后过期进入到order_delay_process_queue 【队列里所有的message都有统一的失效时间】33 */

34 public final static String ORDER_PRE_TTL_DELAY_QUEUE_NAME = "order_pre_ttl_delay_queue";35

36 /**

37 * 订单的交换机DLX 名字38 */

39 final static String ORDER_DELAY_EXCHANGE_NAME = "order_delay_exchange";40

41 /**

42 * 订单message时间过期后进入的队列,也就是订单实际的消费队列43 */

44 public final static String ORDER_DELAY_PROCESS_QUEUE_NAME = "order_delay_process_queue";45

46 /**

47 * 订单在缓冲队列过期时间(毫秒)30分钟48 */

49 public final static int ORDER_QUEUE_EXPIRATION = 1800000;50

51 /**

52 * 订单缓冲交换机53 *54 *@return

55 */

56 @Bean57 publicDirectExchange preOrderExange() {58 return newDirectExchange(ORDER_PRE_EXCHANGE_NAME);59 }60

61 /**

62 * 创建order_per_ttl_delay_queue队列,订单消息经过缓冲交换机,会进入该队列63 *64 *@return

65 */

66 @Bean67 publicQueue delayQueuePerOrderTTLQueue() {68 returnQueueBuilder.durable(ORDER_PRE_TTL_DELAY_QUEUE_NAME)69 .withArgument("x-dead-letter-exchange", ORDER_DELAY_EXCHANGE_NAME) //DLX

70 .withArgument("x-dead-letter-routing-key", ORDER_DELAY_PROCESS_QUEUE_NAME) //dead letter携带的routing key

71 .withArgument("x-message-ttl", ORDER_QUEUE_EXPIRATION) //设置订单队列的过期时间

72 .build();73 }74

75 /**

76 * 将order_pre_exchange绑定到order_pre_ttl_delay_queue队列77 *78 *@paramdelayQueuePerOrderTTLQueue79 *@parampreOrderExange80 *@return

81 */

82 @Bean83 publicBinding queueOrderTTLBinding(Queue delayQueuePerOrderTTLQueue, DirectExchange preOrderExange) {84 returnBindingBuilder.bind(delayQueuePerOrderTTLQueue).to(preOrderExange).with(ORDER_PRE_TTL_DELAY_QUEUE_NAME);85 }86

87 /**

88 * 创建订单的DLX exchange89 *90 *@return

91 */

92 @Bean93 publicDirectExchange delayOrderExchange() {94 return newDirectExchange(ORDER_DELAY_EXCHANGE_NAME);95 }96

97 /**

98 * 创建order_delay_process_queue队列,也就是订单实际消费队列99 *100 *@return

101 */

102 @Bean103 publicQueue delayProcessOrderQueue() {104 returnQueueBuilder.durable(ORDER_DELAY_PROCESS_QUEUE_NAME).build();105 }106

107 /**

108 * 将DLX绑定到实际消费队列109 *110 *@paramdelayProcessOrderQueue111 *@paramdelayExchange112 *@return

113 */

114 @Bean115 publicBinding dlxOrderBinding(Queue delayProcessOrderQueue, DirectExchange delayOrderExchange) {116 returnBindingBuilder.bind(delayProcessOrderQueue).to(delayOrderExchange).with(ORDER_DELAY_PROCESS_QUEUE_NAME);117 }118

119 /**

120 * 监听订单实际消费者队列order_delay_process_queue121 *122 *@paramconnectionFactory123 *@paramprocessReceiver124 *@return

125 */

126 @Bean127 publicSimpleMessageListenerContainer orderProcessContainer(ConnectionFactory connectionFactory,128 OrderProcessReceiver processReceiver) {129 SimpleMessageListenerContainer container = newSimpleMessageListenerContainer();130 container.setConnectionFactory(connectionFactory);131 container.setQueueNames(ORDER_DELAY_PROCESS_QUEUE_NAME); //监听order_delay_process_queue

132 container.setMessageListener(newMessageListenerAdapter(processReceiver));133 returncontainer;134 }135 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值