从读者的反馈谈RabbitMQ

昨天发完《RabbitMQ入门-初识RabbitMQ》,我陆陆续续收到一些反馈。鉴于部分读者希望结合实例来讲

期待下篇详细,最好结合案例。谢谢!
哪都好,唯一缺点就是不支持原生ha,配置起来太复杂
...

上篇主要介绍了什么RabbitMQ,RabbitMQ能用来做什么,一些有关RabbitMQ的基本概念,同时还简单介绍了两种RabbitMQ的分发消息的模型。

从这篇起,我们将改变原来的思路,针对每种模型详细讲解,并结合代码实例了解各个模型的原理和使用场景。

Hello World模型

上篇已经简单介绍过

  • 该模型由三要素组成:P(Producer)、Q(Queue)和C(Consumer)

  • P负责发送消息,Q负责存储消息,C负责消费消息

  • 消息可以在RabbitMQ或者你的应用中传递流动,但是却只能存储在Queue中

  • Queue可以接受多个发送者发送来的消息,也可以供多个消费者消费

实例

###准备工作

首先需要本地或者远程有一个RabbitMQ的服务,具体安装搭建可以网上找资料,类似于一个tomcat服务器

添加Jar包,推荐使用Maven管理jar包的方式,只需要添加依赖到pom.xml文件中就ok

<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.2</version>
</dependency>

发送端

package com.ximalaya.openapi.rabbitmq.helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; import java.util.concurrent.TimeoutException; /**
* Created by jackie on 17/8/2.
*/
public class Send {
private final static String QUEUE_NAME = "hello.august"; public static void main(String[] argv)
throws java.io.IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.3.161"); Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "hello world";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("send message: " + message); channel.close();
connection.close();
}
}
  • 首先创建一个ConnectFactory,并指定服务所在的ip地址,如果你的RabbitMQ启在本机,那setHost就可以写成setHost("localhost")

  • 从连接工厂中拿到一个连接并创建一个Channel

  • 再声明一个队列Queue,表示消息要发到哪个Queue里面

  • 定义要发送的消息message,并通过basicPublish进行消息发送

  • 最后关闭Channel和Connection的连接

运行这段代码后,我们可以看到在Queue(hello.august)中已经有了一个message,说明消息已经发送到Queue上了。

注意这是RabbitMQ的管理界面,我们可以通过这个管理应用,查看这个message的详细信息,在该页面底部有一个Get message的选项,点击我们可以得到刚刚发送的消息的详情

接收端

package com.ximalaya.openapi.rabbitmq.helloworld;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException; /**
* Created by jackie on 17/8/2.
*/
public class Recv {
private final static String QUEUE_NAME = "hello.august"; public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.3.161");
Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null); Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
}; channel.basicConsume(QUEUE_NAME, true, consumer);
}
}

大部分代码和发送端相同,在最后有一个Consumer,其主要用于监听指定ip的RabbitMQ服务上,指定的Queue上的消息。一旦发现有消息,则进行消费。

有一点需要注意,接收端同样声明了一个Queue,这是为什么呢?因为完全会出现一种情况,就是发送端还没有启动,但是接收端已经启动了,这时候要监听消息需要确保Queue已经存在。经过自己测试发现,如果这个Queue不存在则会创建一个同名的Queue,如果已经存在则使用存在的Queue。

这里将接收端的Queue name改为“hello11111”,运行前我们进入管理应用发现没有这个Queue

当运行完接收端的程序后,我们再次查找名为”hello11111”的Queue,就已经存在了

我们把接收端的Queue名称改为与发送端一致,这时候运行程序,我们看下面的动态图片

可以发现Queue中存储的消息有1变为0,即被消费者消费了。

至此,我们了解了RabbitMQ中的Hello World的模型。

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

RabbitMQ入门-从HelloWorld开始的更多相关文章

  1. RabbitMQ入门-高效的Work模式

    扛不住的Hello World模式 上篇<RabbitMQ入门-从HelloWorld开始>介绍了RabbitMQ中最基本的Hello World模型.正如其名,Hello World模型 ...

  2. [转]RabbitMQ入门教程(概念,应用场景,安装,使用)

    原文地址:https://www.jianshu.com/p/dae5bbed39b1 RabbitMQ 简介 RabbitMQ是一个在AMQP(Advanced Message Queuing Pr ...

  3. .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

  4. 消息中间件 RabbitMQ 入门篇

    消息中间件 RabbitMQ 入门篇 五月君 K8S中文社区 今天   作者:五月君,来源:Nodejs技术栈 从不浪费时间的人,没有工夫抱怨时间不够.—— 杰弗逊 RabbitMQ 是一套开源(MP ...

  5. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  6. 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例

    关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...

  7. RabbitMQ入门-消息订阅模式

    消息派发 上篇<RabbitMQ入门-消息派发那些事儿>发布之后,收了不少反馈,其中问的最多的还是有关消息确认以及超时等场景的处理. 楼主,有遇到消费者后台进程不在,但consumer连接 ...

  8. RabbitMQ入门-Topic模式

    上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...

  9. RabbitMQ入门与使用篇

    介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀 ...

随机推荐

  1. HTML5浏览器定位navigator.geolocation.getCurrentPosition

    <!DOCTYPE html> <html> <body> <p id="demo">点击这个按钮,获得您的坐标:</p> ...

  2. js模版引擎开发实战以及对eval函数的改进

    简介 前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用,同时也算是之前学习的知识的一种总结吧! 首先我们先了解一下模版引擎的工作原理吧! 1. 模版引擎其实就是将指定标签的内容根 ...

  3. Greenplum——大数据时代高性能的数据仓库与BI应用平台

    一. Greenplum简介 大数据是个炙手可热的词,各行各业都在谈.一谈到大数据,好多人认为就是Hadoop.实际上Hadoop只是大数据若干处理方案中的一个.现在的SQL.NoSQL.NewSQL ...

  4. 阿里巴巴的datasource

    阿里巴巴的datasource:<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSourc ...

  5. python连接impala(安装impyla)

    相关环境如下: Python3.4 Win7 64位 参照官网https://github.com/cloudera/impyla中的安装步骤执行: 1.pip install six 2.pip i ...

  6. 关于php的一些安全知识

    绝不要以明文形式显示或发送密码.即使是对密码的所有者也应该这样.如果你需要 "忘记密码" 的功能,可以随机生成一个新的 一次性的(这点很重要)密码,然后把这个密码发送给用户 你希望 ...

  7. ionic 最简单的路由形式,头部固定,下面tab切换-------一个简单的单页切换起飞了

    <ion-header-bar class="bar-dark" align-title="left"> <h1 class="ti ...

  8. OpenGL的配置与搭建

    一.项目中所使用的OpenGL扩展库有: 1. freeglut-3.0.0 2. glew-2.0.0 3. glm-0.9.7.3 二.添加扩展库文件 在工程项目文件夹里面添加OpenGLExte ...

  9. 【JAVA】配置JAVA环境变量

    系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  10. Tomcat服务器无法启动socket监听端口

    最近生成一个新的web服务器,在启动后无法启动socket监听,检查程序本身无问题, 找原因,只是发布时搞错.处理如下: 1.在Eclipse平台 删除原来的web server; 2.新建serve ...