RabbitMQ使用规范「建议收藏」

RabbitMQ使用规范「建议收藏」RabbitMQ使用规范命名exchange:{模块名}.{功能名}queue:{word}.{word}routingkey:{word}.{word},例:merge.request,原因:.之间的会被认为是一个单词,便于通过*和#来匹配一个或多个单词序列化默认情况下RabbitMQ发送的消息是为字节码,我们采用统一的JSON格式的消息使用MessageConvert自动转换为JSON如果规定了消息的格式为JSON,并使用消息转换器,则会自动将消息转化为JSON格式而不需要每次

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

RabbitMQ使用规范

命名

  1. exchange:{模块名}.{功能名}
  2. queue:{word}.{word}
  3. routing key:{word}.{word},例:merge.request,原因:.之间的会被认为是一个单词,便于通过*和#来匹配一个或多个单词

序列化

默认情况下RabbitMQ发送的消息是为字节码,我们采用统一的JSON格式的消息

使用MessageConvert自动转换为JSON

如果规定了消息的格式为JSON,并使用消息转换器,则会自动将消息转化为JSON格式而不需要每次手动进行转换。RabbitTemplate默认使用SimpleMessageConverter作为自己的消息转化器,而SimpleMessageConverter并不能满足JSON消息的需求。我们可以使用Jackson2JsonMessageConverter作为默认的消息转换器。

特别注意:

  • 生产者和消费者需要使用相同的MessageConvert,消息类型可通过header中的content-type来确认

  • 对于String类型的消息,SimpleMessageConverterJackson2JsonMessageConverter的处理策略是不一样的,具体提现为:

    • content-type:分别是text/plainapplication/json

    • Jackson2JsonMessageConverter会多出两个双引号" "从而导致字符串大变样,示例如下:

      生产者代码

      String context = "hello \"rabbitMQ\" ";
      rabbitTemplate.convertAndSend("hello", context);
      

      当使用SimpleMessageConverter时,rabbitMQ队列中的消息:hello "rabbitMQ"

      当使用Jackson2JsonMessageConverter时,rabbitMQ队列中的消息:"hello \"rabbitMQ\" "

  • 如果想要在发送消息时自定义格式,请使用send而不是conertAndSend方法,接收方也请使用receive而不是receiveAndConvert

为RabbitTemplate配置MessageConverter:

@Configuration
public class RabbitConfig { 
   

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
   
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jsonMessageConverter());
        return rabbitTemplate;
    }

    @Bean
    public Jackson2JsonMessageConverter jsonMessageConverter() { 
   
        return new Jackson2JsonMessageConverter();
    }
}

配置优化

生产者消息确认机制

spring:
	rabbitmq:
		#确认消息已发送到交换机(Exchange)
		publisher-confirms: true
		#确认消息已发送到队列(Queue)
		publisher-returns: true
@Slf4j
@Configuration
public class RabbitConfig { 
   

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
   
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jsonMessageConverter());
      
      	// 开启交换机确认
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { 
   
              @Override
              public void confirm(CorrelationData correlationData, boolean ack, String cause) { 
   
                  log.info("=======ConfirmCallback=========");
                  log.info("correlationData = " + correlationData);
                  log.info("ack = " + ack);
                  log.info("cause = " + cause);
                  log.info("=======ConfirmCallback=========");
              }
          });
 					
      		// 开启队列失败确认
          rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { 
   
              @Override
              public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { 
   
                  log.info("--------------ReturnCallback----------------");
                  log.info("message = " + message);
                  log.info("replyCode = " + replyCode);
                  log.info("replyText = " + replyText);
                  log.info("exchange = " + exchange);
                  log.info("routingKey = " + routingKey);
                  log.info("--------------ReturnCallback----------------");
              }
          });
        return rabbitTemplate;
    }
}

本地重试确认机制

spring:  
  rabbitmq:
    listener:
      simple:
        retry:
        	# 开启本地重试机制,默认3次,避免内存泄漏
          enabled: true
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186246.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jdbctype有哪些类型oracle_java type类型

    jdbctype有哪些类型oracle_java type类型java.sql.Types值JavaTypeIBMDB2OracleSybaseSQLInformixIBMContentManagerBIGINTjava.lang.longBIGINTNUMBER(38,0)BIGINTBIGINTINT8DK_CM_BIGINTBINARYbyte[]CHAR…

    2022年10月20日
    2
  • eclipse svn上传代码_svn统计每个人代码提交行数

    eclipse svn上传代码_svn统计每个人代码提交行数1.先去将本地的代码更新到最新,如果更新内容较少,可以点击资源同步,具体可以看一下博主:svn创建svn图文2.更新成最新的代码之后,点击创建补丁,点击第二个file文本框,选择一个文件夹存下一个文件。3.打开申请上线权限,。点击puth,填写./4.申请通过之后,复制review+版本号5.将复制的版本号放到comment下6.点击ok。…

    2022年10月15日
    3
  • 流程引擎BPM对比[通俗易懂]

    流程引擎BPM对比[通俗易懂]流程引擎就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。通俗的说,流程就是多种业务对象在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是流程引擎。

    2022年10月20日
    2
  • IDEA 汉化插件

    IDEA 汉化插件最近更新了最新版本的IDEA,听同事说有官方汉化插件了,这里跟大家分享下:直接去设置中插件搜索chinese就可以看到,下载安装,然后重启就会生效ps:如果没有查找到或者不生效,升级下自己的IDEA版本…

    2022年6月7日
    48
  • 客户端和服务器不支持一,客户端和服务器不支持常用的 SSL 协议版本或加密套件。导致此问题的原因通常是服务器要求使用 SSLv3…

    客户端和服务器不支持一,客户端和服务器不支持常用的 SSL 协议版本或加密套件。导致此问题的原因通常是服务器要求使用 SSLv3…您的问题是:“客户端和服务器不支持常用的SSL协议版本或加密套件。导致此问题的原因通常是服务器要求使用SSLv3服务器加密别的网站都可以正常打开想打开这样的网站需要怎么设置工具Internet高级安全里面SSL1SSL2点对号也不行原理的少说结果我能打开网站就好”回答:你好,这是chrome内核的浏览器的实验性功能设置不正确导致的。下面附上完美解决方案。请按以下步骤…

    2022年5月5日
    4.3K
  • 手机上安装FTP客户端软件(AndFTP),实现通过手机访问计算机FTP服务器

    手机上安装FTP客户端软件(AndFTP),实现通过手机访问计算机FTP服务器第一步把手机和计算机连接到同一个局域网中(通过WiFi、数据线等)才能进行下面的操作。(本次操作通过wifi连接)第二步:查看手机的IP地址设置—>WLAN—>点击所连的WiFi名,即可查看手机的ip地址。本机IP地址为:172.20.10.12第三步:ping命令测试手机与电脑是否连接打开DOS命令窗口,输入ping172.20.10.1…

    2022年5月25日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号