Rabbitmq消息队列:HelloWorld消息直传模式简单应用
一、引入依赖
新建一个maven项目,在pom.xml配置文件中加入以下依赖。
二、封装工具类
新建一个用于rabbitmq连接工具类RabbitmqConUtil,内容如下:
三、测试HelloWorld直传模式
直传模式不需要交换机,只需要最基本的生产者和消费者。
1、生产者
创建一个Give类,先使用刚才编写的工具类来获取rabbitmq连接,再创建通道,声明使用的队列并发送内容。
在声明使用的队列时,注意要和消费者在同一个队列里,这样才能保证信息的正确传递。
channel.queueDeclare()方法中的参数分别为:
channel.basicPublish()方法中的参数分别为:
运行结果如下:
2、消费者
创建一个Get类,使用刚才编写的工具类来获取rabbitmq连接,再创建通道,声明使用的队列,定义DefaultConsumer类型的消费者并重写其内部的handleDelivery方法,在方法内部接受内容并处理和确认消息,防止数据丢失。
获取连接、创建通道、声明队列这块和生产者一致,因为用的是同一个连接下的同一个队列。
定义消费者的时候,使用DefaultConsumer(老版本的QueueingConsumer已过期,在后续版本可能会移除),这个比较新且能手动确认消息。手动确认消息的意义在于,数据安全性。如果是自动确认消息的话,在拿到消息到给到用户的过程中,如果有存在处理消息的逻辑一旦出现故障,用户还没有拿到消息,但此时rabbitmq已经自动确认并且自动删除的话就会造成消息数据的丢失。所以要在处理消息的逻辑走完之后,再去手动确认消息,保证数据安全。
handleDelivery方法中对接受的消息进行了处理,调整为UTF-8字符集。
handleDelivery为自循环的方法,只要不关闭通道和连接,它就会一直运行,Give类每次运行推出的消息,都会被它直接接收并显示。
channel.basicAck()方法是手动确认消息,false为确认收到消息,true为拒绝收到消息。
channel.basicConsume()方法中的参数分别为:
运行结果如下:
四、暂存问题记录
学完这个之后突然发现一个问题,就是在发送和接收消息后,是否要对通道和连接进行关闭?
从内存上来说,应该要关闭的,否则会造成内存泄漏。
但是加上通道和连接的关闭之后,有两点问题。第一点是频繁的创建连接和通道,比较浪费资源,因为本身连接和通道是可以长期使用的,第二点就是在关闭通道和连接的过程中,可能接受发送或者接受消息的操作还没有执行完,这时候可能会造成执行失败或者是报错。这块还需要多了解一些,目前就是浅显的测试学会如何使用。
__EOF__

本文链接:https://www.cnblogs.com/guobin-/p/17802678.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2018-11-02 NoSQL学习——MongoDB
2018-11-02 HBase相关的一些点