RabbitMQ消息队列生产者和消费者
概述
详细
一、准备工作
1、安装 RabbitMQ 服务和 RabbitMQ Management。
2、在 RabbitMQ 管理界面创建用户 test 密码 test,创建名为 test_vhost 的 Virtual Hosts ,将 test_vhost 分配 给 test用户
3、本实例主要演示如何发送消息至 RabbitMQ 队列 ,以及如何消费 RabbitMQ 队列的消息
二、程序实现
1、程序结构
2、实现思路
配置发送的 Exchange 和 Queue
<rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
auto-declare="true" auto-delete="false" exclusive="false" durable="true"
declared-by="rabbitAdmin" /> <!-- Exchange Type 为 topic 配置方法 -->
<rabbit:topic-exchange id="exchange.topic.producer"
auto-declare="true" name="exchange.topic.producer" auto-delete="false"
durable="true" declared-by="rabbitAdmin">
<rabbit:bindings>
<rabbit:binding pattern="queue.ljaer.test" queue="queue.ljaer.test" />
</rabbit:bindings>
</rabbit:topic-exchange>
连接 RabbitMQ 发送数据至队列
public class RabbitmqProducerTest { private static ApplicationContext context; public static void main(String[] args) {
context = new ClassPathXmlApplicationContext("send-rabbitMq.xml");
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
JSONObject json = new JSONObject();
json.put("name", "张三");
json.put("age", "15");
amqpTemplate.convertAndSend("queue.ljaer.test", json);
//amqpTemplate.convertAndSend("exchange.topic.producer","queue.ljaer.test", json);
System.out.println("success");
}
}
配置监听
<!--定义queue 接收数据 -->
<rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
auto-declare="true" auto-delete="false" exclusive="false" durable="true"
declared-by="rabbitAdmin" /> <!-- 消息监听器 -->
<bean id="rabbitmqConsumerTest" class="com.test.mq.RabbitmqConsumerTest" /> <!-- 队列监听 -->
<rabbit:listener-container
connection-factory="connectionFactory" acknowledge="auto">
<rabbit:listener queues="queue.ljaer.test" ref="rabbitmqConsumerTest" />
</rabbit:listener-container>
监听消费 RabbitMQ 队列的数据
public class RabbitmqConsumerTest implements MessageListener { public void onMessage(Message message) {
System.out.println("receive message:{}"+message.getBody());
try {
String s = new String(message.getBody(), "UTF-8");
System.out.println("------>MQ接收到的数据:"+s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、配置文件说明
#mq
mq.host=192.168.99.100
mq.username=test
mq.password=test
mq.port=5672
mq.vhost=/test_vhost
三、运行效果
1、导入项目至 Eclipse,修改 rabbit.properties 里面的连接信息,连接至你本地的 RabbitMQ 服务
2、执行 RabbitmqProducerTest 的 main 方法,发送消息至 RabbitMQ 队列
3、执行 RabbitmqConsumerMain 的 main 方法,进行队列监听,消费 RabbitMQ 队列里的数据
消费完之后,在 RabbitMQ Managemenet 里面查看也会看到队列数据减少
四、其他补充
1、注意用 guest 用户创建 test 用户之后,需要使用 test 用户登录才能看到该用户下的队列数据
2、如果选择其他类型的 exchange ,注意配文件与 mq 上保持一致
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
RabbitMQ消息队列生产者和消费者的更多相关文章
- 十五、.net core(.NET 6)搭建RabbitMQ消息队列生产者和消费者的简单方法
搭建RabbitMQ简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客,在windows系统上的rabbitmq环境搭建.如果使用docker环境,可以直接百度一下,应该就一个语句就可以搞定 ...
- RabbitMQ消息队列之二:消费者和生产者
在使用RabbitMQ之前,需要了解RabbitMQ的工作原理. RabbitMQ的工作原理 RabbitMQ是消息代理.从本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间,它可以根 ...
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- RabbitMQ消息队列应用
RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...
- RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- RabbitMQ消息队列
RabbitMQ消息队列 !!! 注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析 # 优点,能够保证消息数据持久化,不丢失,支持高并发 安装学习rabbitm ...
- RabbitMQ消息队列(二)-RabbitMQ消息队列架构与基本概念
没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中 ...
- rabbitMQ消息队列1
rabbitmq 消息队列 解耦 异步 优点:解决排队问题 缺点: 不能保证任务被及时的执行 应用场景:去哪儿, 同步 优点:保证任务被及时的执行 缺点:排队问题 大并发 Web nginx 1000 ...
- RabbitMQ 消息队列 应用
安装参考 详细介绍 学习参考 RabbitMQ 消息队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. M ...
随机推荐
- Log4net 配置输出文本, 按年月日分文件夹 z
在项目中新建 “log4net.config” 文件 <?xml version="1.0" encoding="utf-8" ?> <con ...
- Selenium2+python自动化60-异常后截图(screenshot)
前言 在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据. 在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,那么如何在断言失败后截图呢? 一.截图方 ...
- LODOP打印控件之LODOP.NewPageA()方法
通过lodop的强制分页方法,当我们一次性需要打印多张单页面的时候,可以通过该方法实现一次性打出,而不是重复调用打印方法,容易出问题 LODOP.NewPageA(); 说明:强制分页,注意是.New ...
- 修改一行SQL代码 性能提升了100倍
在PostgreSQL中修改了一行不明显的代码,把(ANY(ARRAY[...]) 改成 ANY(VALUES(...))),结果查询时间从20s变为0.2s.最初我们学习使用 EXPLAN ANAL ...
- ftp 命令行操作 经常使用命令
> ftp <host> [port] > pwd # 查看当前文件夹 > dir # 查看FTPserver中的文件及文件夹 > mkdir <dirn ...
- Android Studio安装&&安装bug
1.安装SDK:Android SDK安装 2.安装Android Studio 3.配置HTTP Proxy: 转自:Android Studio设置HTTP代理(可用) 因为大陆的内网的防火墙很厉 ...
- RS开发值提示默认为当前月
在报表的开发过程中,按月查询数据,但是由于数据仓库中涉及多年历史数据,而用户最关心的却是最近的数据,针对这个情况.当用户第一次点击报表想看到的就是当前月的数据,那么如何去做呢? 下面用一个小例子来实战 ...
- Oracle查询client编码集
Oracle查询client编码集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------- ...
- 在Foreda8上试安装Apchehttpd-2.4.6.tar.gz
下文是我边试边做的记录,不保证内容的完整性和正确性. 由于我的Apsire机器是最简安装Foreda8,所以需要安装httpd,熟悉一遍也是很好的嘛. 我从网上搜罗并下载了apchehttpd-2.4 ...
- 【Python学习笔记】
目录 语法 if语句 while循环 字符串常用操作 列表 只读列表元组 字典的使用 语法 if语句 示例 #!/usr/bin/env python user = 'jack' passwd = ' ...