RabbitMQ基本使用及企业开发中注意事项

这篇具有很好参考价值的文章主要介绍了RabbitMQ基本使用及企业开发中注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、基本使用

二、使用注意事项

1. 生产者重连机制 - 保证mq服务是通的

2. 生产者确认机制 - 回调机制

3. MQ的可靠性

4. Lazy Queue模式

5. 消费者确认机制


一、基本使用

部署完RabbitMQ有两种使用方式:

  • 网页客户端
  • Java代码

MQ组成部分:

  • 虚拟主机 -> 进行数据隔离的,好比mysql中的不同数据库
  • 交换机 -> 进行路由转发消息
    • fanout:最普通 相当于广播
    • topic:可依key绑定不同队列,可使用.分割key,并支持模糊匹配
    • direct:可依key绑定不同队列,不支持模糊匹配
  • 队列 -> 接受交换机转发过来的消息

Java中使用(注解开发):

1.引依赖和配置属性 - 版本选个差不多的 我是继承的springboot的

        <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
spring:
  rabbitmq:
    host: 192.168.189.189
    port: 5672
    virtual-host: hmallVir
    username: hmall
    password: 123321

2.使用RabbitTemplate发消息

@SpringBootTest
public class TestSendMs {
    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    void testSend1(){
        String queueName = "hmallQueue1";
        String ms = "hello";
        rabbitTemplate.convertAndSend(queueName, ms);
    }

}

3.使用RabbitListerner接受消息

@Component
public class MyListeners {

    @RabbitListener(queues = "hmallQueue1")
    public void listenerMs1(String ms) throws InterruptedException {
        System.out.println("消费者1接收到消息  ->  " + ms);
        Thread.sleep(20);
    }

}

4.声明队列和交换机的方式二(简单常用)

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "hmallQueue1"),
            exchange = @Exchange(name = "hmall", type = ExchangeTypes.DIRECT),
            key = {"red", "blue"}
    ))
    public void listenDirectQueue1(String msg){
        System.out.println("消费者1接收到消息 -> " + msg);
    }

轮询接受消息问题:

队列读取消息时使用轮询机制,每个队列都读取相同的消息数量,这样不好,我们要针对队列处理消息的能力,需要在配置文件设置属性fetch

spring:
  rabbitmq:
    host: 192.168.189.189
    port: 5672
    virtual-host: hmallVir
    username: hmall
    password: 123321
    listener:
      simple:
        prefetch: 1 # 每次处理完消息再获取新的消息 性能越好处理消息越多

项目中使用mq的注意事项,RabbitMQ,rabbitmq,linux,分布式

扩展消息转换器:

默认的消息转换器是直接将对象序列化为Byte[],即读不懂又不安全还占内存

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>
    @Bean
    public MessageConverter jacksonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }

二、使用注意事项

1. 生产者重连机制 - 保证mq服务是通的

连接重试,注意这里是阻塞式的,意味着连接失败会一直重试其他业务不会执行,所以建议禁用此模式。

spring:
  rabbitmq:
    host: 192.168.189.189
    port: 5672
    virtual-host: hmallVir
    username: hmall
    password: 123321
    connection-timeout: 1s # 连接失败重试
    template:
      retry:
        enabled: true # 开启重试机制
        initial-interval: 1000ms # 失败后的初始等待时间
        multiplier: 1 # 失败后下次的等待市场倍数
        max-attempts: 3 # 最大重试次数
2. 生产者确认机制 - 回调机制

SpringAMQP生产者确认机制的返回值情况?

  1. ack 消息成功投递到mq
    1. 交换机收到了 没有路由转发到队列 ack + return路由异常
    2. 交换机收到并路由成功 只ack
  2. nack 消息丢失 投递失败
3. MQ的可靠性

服务一旦挂了消息就都没有了,还有就是内存如果满了,会触发阻塞式的强制持久化操作,这会导致这段时间处理消息的能力为0

  1. 设置消息的持久化属性:需要将delivery_mode属性设置为2。这个设置会将消息标记为持久化,确保消息被写入磁盘而不是仅保存在内存中。
  2. 声明持久化的队列:在RabbitMQ中声明队列时,需要将durable属性设置为true。这样,队列的元数据以及队列中的消息都会被持久化到磁盘上。需要注意的是,即使队列被设置为持久化,也不能保证内部所存储的消息不会丢失,因为RabbitMQ默认在消息被消费后立即删除它。要确保消息不被删除,需要在消费时进行相应的设置。
  3. 声明持久化的交换机:与队列类似,交换机也可以被设置为持久化。在声明交换机时,将durable属性设置为true,就可以将交换机标记为持久化。如果交换机不设置持久化,那么在RabbitMQ服务重启之后,相关的交换机元数据会丢失,但已发送的消息不会丢失,只是不能再将新的消息发送到这个交换机中。
4. Lazy Queue模式
  1. 降低内存压力:在高负载情况下,大量消息堆积可能导致内存压力剧增。使用Lazy Queue模式,消息直接写入磁盘,可以有效降低内存使用,避免内存溢出等问题。
  2. 支持大量消息存储:由于消息存储在磁盘上,Lazy Queue模式可以支持数百万条消息的存储,满足大规模消息处理的需求。
  3. 提高系统稳定性:通过将消息持久化到磁盘,Lazy Queue模式增强了消息的可靠性,即使RabbitMQ服务器发生故障或重启,消息也不会丢失,保证了系统的稳定性和数据的完整性。

项目中使用mq的注意事项,RabbitMQ,rabbitmq,linux,分布式项目中使用mq的注意事项,RabbitMQ,rabbitmq,linux,分布式


5. 消费者确认机制

这里就是模拟事务嘛,利用AOP思想

项目中使用mq的注意事项,RabbitMQ,rabbitmq,linux,分布式文章来源地址https://www.toymoban.com/news/detail-858216.html

到了这里,关于RabbitMQ基本使用及企业开发中注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# Solidworks二次开发:自动创建虚拟零件及使用注意事项

    今天要讲的是关于在solidworks中如何自动创建虚拟零件的功能,也就是solidworks中插入新零件这个功能。 实现这个功能需要使用的API如下所示: InsertNewVirtualPart(swFaceOrPlane1, out swcomp2); 其中这个方法中使用到了两个参数。 第一个参数:为一个平面,或是一个基准平面。 第二

    2024年02月15日
    浏览(44)
  • 如何使用Vscode开发Uni-app项目以及注意事项详解

    哟,大牛来了!!! 前言 :想必大家敲代码用的编辑器大多数都是Vscode吧,随着技术的更新,uni-app成为了前端不可或缺的一项技术,但是呢,官方推荐使用的HBuilderX编辑器让习惯了使用Vscode的我们不太习惯,虽然HBuilderX编辑器对uni-app极度的友好,但还是让在座的各位大牛以及

    2024年02月05日
    浏览(42)
  • PHP运行的注意事项和基本语法规范

    👨‍💻个人主页 :@开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏 :PHP程序开发 — 通过编写并运行第一个 PHP程序,读者将了解如何开始写 PHP 脚本,并通过 PH函数 echo输出语句,同时还将了解到程序开

    2024年04月11日
    浏览(29)
  • Android小白开发注意事项

    1.设置第三方依赖包   2.第一次加载编译   3.apk打包    这个签名文件的密码在app级别的build.gradle里面   然后下一步选你要打的环境的包,release是发行包,一个给别人安装打这个,debug是调试包,会比release包大,并且会有点卡一般是开发调试用的,这个可以多选。    环境

    2024年02月16日
    浏览(30)
  • 【Docker】 Docker 开发注意事项

    在使用 Docker 进行开发时,需要注意以确保开发过程顺利和高效: 1. 了解 Docker 基础:在开始之前,了解 Docker 的基本概念,如镜像(Images)、容器(Containers)、仓库(Repositories)和 Dockerfile 的基本语法。 2. 编写清晰的 Dockerfile:Dockerfile 应该清晰、简洁,并且易于理解。确保

    2024年02月03日
    浏览(26)
  • [游戏开发][虚幻5]新建项目注意事项

    鼠标右键点击Client.uproject文件,可以看到三个比较关键的选项, 启动游戏, 生成sln解决方案, 切换引擎版本 断点调试 C++代码重要步骤 如果你想断点调试C++代码,则必须使用使用代码编译启动引擎,你需要做几个操作 1:把你的游戏作为启动项。如果你不设置,则默认打开

    2024年02月22日
    浏览(30)
  • 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串&UNION与OR的使用注意事项

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月21日
    浏览(31)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(50)
  • 02【保姆级】-GO语言开发注意事项(特色重点)

    之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。 先Know how,然后know why。 先做出来,然后再去一点点研究,才会事半功倍。 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。 对于GO语言,切记遵守语法格式规则。(例如python语言、例如

    2024年02月06日
    浏览(29)
  • 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

      CMSIS (微控制器 软件接口标准 ):Cortex Microcontroller Software Interface Standard,是由ARM和与其合作的芯片厂商( 比如ST、NXP公司等 )、软件工具厂商( Keil、IAR公司等 ),共同制定的标准。 如果没有此标准,ARM公司的产品兼容性非常差。   下图中分为三层,第一层是用户层

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包