YML
| rabbitmq: |
| host: xxx.xxx.xxx.xxx |
| port: 5672 |
| virtual-host: dev |
| username: xxx |
| password: xxx |
| publisher-confirm-type: correlated |
| publisher-returns: true |
| listener: |
| direct: |
| acknowledge-mode: auto |
| simple: |
| acknowledge-mode: none |
配置
| public class RabbitConfig { |
| |
| @Resource |
| private RabbitUtil rabbitUtil; |
| |
| @Bean |
| public MessageConverter jsonMessageConverter(){ |
| return new Jackson2JsonMessageConverter(); |
| } |
| |
| @Bean |
| RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) { |
| final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); |
| rabbitTemplate.setMessageConverter(jsonMessageConverter()); |
| rabbitTemplate.setConfirmCallback((correlationData,ack,cause)->{ |
| if(!ack) log.error("NFT_MQ_ConfirmCallback => cause={}", cause); |
| }); |
| rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey)->{ |
| log.info("NFT_MQ_ReturnCallback => message={},replyCode={},replyText={},exchange={},routingKey={}", message, replyCode, replyText, exchange, routingKey); |
| rabbitUtil.failMessage(message, exchange, routingKey, replyCode + " | " + replyText); |
| }); |
| return rabbitTemplate; |
| } |
| |
| @Bean |
| public CustomExchange delayExchange() { |
| Map<String, Object> args = new HashMap<>(); |
| args.put("x-delayed-type", "direct"); |
| return new CustomExchange(RabbitKey.delay_exchange, "x-delayed-message", true, false, args); |
| } |
| |
| @Bean |
| public FanoutExchange globalFanoutExchange(){ |
| return new FanoutExchange(RabbitKey.global_fanout_exchange); |
| } |
| |
| } |
发送
| JSONObject msgData = new JSONObject(); |
| msgData.put("loginType", loinType); |
| msgData.put("loginPlat", "client"); |
| RabbitMessageModel model = RabbitMessageModel.loginModel(RabbitMessageDataType.userLogin, user.getId(), msgData); |
| rabbitTemplate.convertAndSend(RabbitKey.global_fanout_exchange, "", model); |
接收
| @RabbitListener(bindings = @QueueBinding( |
| value = @Queue(name = "global_fanout_queue_client", durable = "true"), |
| exchange = @Exchange(name = RabbitKey.global_fanout_exchange, type = ExchangeTypes.FANOUT) |
| )) |
| public void globalFanoutQueue(RabbitMessageModel model) { |
| RabbitMessageDataType type = RabbitMessageDataType.typeOf(model.getDataType()); |
| switch (type) { |
| case workView: workView(model); break; |
| } |
| } |
| |
| ------------------------------------------------------- |
| |
| @RabbitListener( |
| bindings = @QueueBinding( |
| value = @Queue(value = RabbitKey.payment_cancel_delay + "_client", durable = "true"), |
| exchange = @Exchange(value = RabbitKey.delay_exchange, delayed = "true"), |
| key = RabbitKey.payment_cancel_delay |
| ) |
| ) |
| public void cancel(RabbitMessageModel model) { |
| Payment payment = paymentDao.findById(model.getDataId()).orElse(null); |
| if(payment == null) return; |
| paymentService.cancel(payment.getOrderNumber(), 1); |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!