Rabbit消息队列使用

古城微笑少年丶 2022-04-01 05:56 293阅读 0赞

由于项目使用Spring Cloud 分布式架构,整个项目拆分成多个子服务,每个服务服务之间出于设计需要,不互相依赖,需要服务和服务之间相互发消息。现在成熟的消息队列技术有很多,我们项目使用Rabbit MQ

  1. @RabbitListener(bindings = @QueueBinding(
  2. value = @Queue(value = queueName, durable = "true", ignoreDeclarationExceptions = "true"),
  3. exchange = @Exchange(value = EventConfig.exchangeGR, type = ExchangeTypes.FANOUT, durable = "true"),
  4. key = "orderRoutingKey", ignoreDeclarationExceptions = "true"))
  5. public void save(@Payload GoodsReciptEvent event, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
  6. log.info("SaveEvent: " + event.toString());
  7. try {
  8. channel.basicAck(deliveryTag, false);
  9. }catch (Exception e){
  10. log.info("event json -->"+JSONObject.toJSONString(event));
  11. try {
  12. channel.basicAck(deliveryTag, false);
  13. }catch (Exception ee){
  14. log.error("save failed !",e);
  15. }
  16. }

上面是项目java代码,只要rabbit环境已经安装好,依赖的jar包spring-rabbit-1.7.3.RELEASE.jar也引入进来,就可以正常发送接收消息。
有几个注意点,说明一下。
1、exchange = @Exchange(value = EventConfig.exchangeGR,
表示接收的交换器名称是EventConfig.exchangeGR,自己根据项目情况灵活配置上。
2、value = @Queue(value = queueName
表示接收的消息队列名称是queueName,自己根据项目情况灵活配置上。
3、type = ExchangeTypes.FANOUT
表示接收消息的类型,分为常用的三种FANOUT,广播模式,只要连接上,消息就全部通过接收到;DIRECT,直连模式,表示消息单独发;TOPIC,订阅模式,根据key匹配规则,匹配符合规则的消息数据
4、key=xxx,表示接收消息时候的key,TOPIC模式必须配置上
5、消息接收消费后,一定要channel.basicAck(deliveryTag, false)删除消息
在这里插入图片描述

上面截图是项目中rabbit消息队列的网页登录信息,可以看见当前消息是否阻塞,正常状态(Ready)的消息数量,阻塞的状态(Ucacked)数量。
注意:一般接收消息端,出现消息阻塞,服务重启后,阻塞消息就释放到正常状态,也可以根据情况,手动在界面上删除QUE。

发表评论

表情:
评论列表 (有 0 条评论,293人围观)

还没有评论,来说两句吧...

相关阅读

    相关 消息中间件Rabbit(七)-延迟队列

    一. 延迟队列概念 延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来

    相关 Rabbit消息队列使用

    由于项目使用Spring Cloud 分布式架构,整个项目拆分成多个子服务,每个服务服务之间出于设计需要,不互相依赖,需要服务和服务之间相互发消息。现在成熟的消息队列技术有很多