概述

生产者生产数据至 RabbitMQ 队列,消费者消费 RabbitMQ 队列里的数据。

详细

一、准备工作

1、安装 RabbitMQ 服务和 RabbitMQ Management

RabbitMQ在windows下的安装 (点击查看) 

RabbitMQ官网(可下载安装包)(点击查看)

 

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消息队列生产者和消费者的更多相关文章

  1. 十五、.net core(.NET 6)搭建RabbitMQ消息队列生产者和消费者的简单方法

    搭建RabbitMQ简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客,在windows系统上的rabbitmq环境搭建.如果使用docker环境,可以直接百度一下,应该就一个语句就可以搞定 ...

  2. RabbitMQ消息队列之二:消费者和生产者

    在使用RabbitMQ之前,需要了解RabbitMQ的工作原理. RabbitMQ的工作原理 RabbitMQ是消息代理.从本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间,它可以根 ...

  3. (转)RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

  4. RabbitMQ消息队列应用

    RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...

  5. RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

  6. RabbitMQ消息队列

    RabbitMQ消息队列 !!!  注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析 # 优点,能够保证消息数据持久化,不丢失,支持高并发 安装学习rabbitm ...

  7. RabbitMQ消息队列(二)-RabbitMQ消息队列架构与基本概念

    没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中 ...

  8. rabbitMQ消息队列1

    rabbitmq 消息队列 解耦 异步 优点:解决排队问题 缺点: 不能保证任务被及时的执行 应用场景:去哪儿, 同步 优点:保证任务被及时的执行 缺点:排队问题 大并发 Web nginx 1000 ...

  9. RabbitMQ 消息队列 应用

    安装参考    详细介绍   学习参考 RabbitMQ 消息队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. M ...

随机推荐

  1. [Erlang 0004] Centos 源代码编译 安装 Erlang

    原文地址: http://www.cnblogs.com/me-sa/archive/2011/07/09/erlang0004.html 由于最终部署的生产环境是Centos,所以我需要在Cento ...

  2. java中方法drawImage()的参数详细解释

    public abstract boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer) ...

  3. java类与继承的执行顺序

    1.子类 public class TestClassLife extends TestClassLifeSuper { public TestClassLife() { System.out.pri ...

  4. matlab 使用OPENCV

    +cv就是 测试: h=cv.imread('c:\h.jpg');

  5. 《C和指针》整理一

    1.C语言的凝视     在C语言中,假设须要凝视掉一段代码.且代码中可能会已经存在/**/凝视形式,那么能够使用: #if 0     statements #endif     这样的形式来凝视掉 ...

  6. 混沌数学之Baker模型

    相关DEMO参见:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/ac9b57ea172ded630b1cb65b.html class Ba ...

  7. ING【转载】处理大并发系列

    一直在处理高可用高并发的服务.看到网上有一个系列的文章,写的不错.跟进一下. 一:http://blog.csdn.net/feitianxuxue/article/details/8936802 二 ...

  8. Android数据填充器LayoutInflater

    LayoutInflater类在应用程序中比较实用,可以叫布局填充器,也可以成为打气筒,意思就是将布局文件填充到自己想要的位置,LayoutInflater是用来找res/layout/下的xml布局 ...

  9. Dropwizard框架入门

    最近项目用到了Dropwizard框架,个人感觉还不错,那么这里就从他们官网入手,然后加上自己的实现步骤让大家初步了解这个框架. 官网对DW(Dropwizard)的定义是跨越了一个库和框架之间的界限 ...

  10. 只用CSS做到完全居中

    我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但是,请注意!想让元素绝对居中,只需要声明元素高度,并且附加以下样式, ...