RabbitMQ初探
1. MQ是什么
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ。
2. MQ的特点
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
3. 使用场景
最近在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
4. RabbitMQ是什么
rabbitMQ是一个在AMQP基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议。
5. RabbitMQ安装
5.1) 安装ERLANG
首先,因为RabbitMQ由ERLANG实现,下载ERLANG(http://www.erlang.org/download.html)源代码。
解压源代码至ERLANG至文件夹$ERLANG
安装依赖包:
Yum install tk
Yun install tcl
Yum install unixODBC
进入$ERLANG.编译ERLANG
./configure –prefix=/usr/local/erlang
./make
./make install
并将erlang bin目录加至PATH
5.2) 安装rabbitMQ
下载RabbitMQ(http://www.rabbitmq.com/download.html),解压至$RMQ。
启动RabbitMQ
./bin/rabbitmq-server
6. 编写RabbitMQ生产者客户端
package org.corey.mq;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.ConnectionParameters;
import com.rabbitmq.client.MessageProperties;
public class MQTestor {
public static void main(String[] args) throws Exception {
ConnectionParameters params = new ConnectionParameters();
params.setUsername("guest");
params.setPassword("guest");
params.setVirtualHost("/");
params.setRequestedHeartbeat(0);
ConnectionFactory factory = new ConnectionFactory(params);
Connection conn = factory.newConnection("192.168.1.101", 5672);
Channel channel = conn.createChannel();
channel.exchangeDeclare("ex1", "direct", true);
channel.queueDeclare("q1",true);
channel.queueBind("q1", "ex1", "m1");
byte[] msg = "hello world".getBytes();
channel.basicPublish("ex1", "m1", MessageProperties.PERSISTENT_TEXT_PLAIN, msg);
channel.close();
conn.close();
}
}
7. 编写消费者客户端
ConnectionParameters params = new ConnectionParameters();
params.setUsername("guest");
params.setPassword("guest");
params.setVirtualHost("/");
params.setRequestedHeartbeat(0);
ConnectionFactory factory = new ConnectionFactory(params);
Connection conn = factory.newConnection("192.168.1.101", 5672);
Channel channel = conn.createChannel();
GetResponse res=channel.basicGet("q1", false);
if(res!=null){
System.out.println(new String(res.getBody()));
channel.basicAck(res.getEnvelope().getDeliveryTag(), false);
}else{
System.out.println("No message!");
}
8. RabbitMQ的几个概念
Exchange:交换机,决定了消息路由规则;
Queue:消息队列;
Channel:进行消息读写的通道;
Bind:绑定了Queue和Exchange,意即为符合什么样路由规则的消息,将会放置入哪一个消息队列;
9. RabbitMQ消息持久化
1) 将交换机置为可持久;
2) 将通道置为可持久
3) 消息发送时设置可持久。
当我们“生产”了一条可持久化的消息,尝试中断MQ服务,启动消费者获取消息,消息依然能够恢复。相反,则抛出异常。
RabbitMQ初探相关推荐
- RabbitMq初探——安装
rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv ra ...
- RabbitMQ初探--用C#简单实现通信服务
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传递指的是程序之 ...
- [Erlang 0079] RabbitMQ 初探
最近在项目中实践RabbitMQ,比较幸运现在除了官方网站,还有一本非常棒的书可以读:RabbitMQ in Action;这本书目前还没有中文版或者影印版,但是从网上很容易找到PDF版本和epub ...
- RabbitMq初探——Hello World
HelloWorld 前言 这里我们弱化broker内部构造.将整体分为三部分. P:producer.生产者. C:Consumer.消费者. queue:队列. 后面的代码都依赖于 the php ...
- 初探 RabbitMQ 消息队列
初探 RabbitMQ 消息队列 rabbitmq基础概念常见应用场景导入依赖属性配置具体编码定义队列实体类控制器消息消费者主函数测试总结说点什么 SpringBoot 是为了简化 Spring 应用 ...
- 初探RabbitMQ与简单实现
RabbitMQ 简介: RabbitMQ是一个由Erlang语言开发的AMQP的开源实现,高级消息队列协议即Advanced Message Queuing Protocal,是应用层协议的一个开放 ...
- 初探RabbitMQ
官网 安装教程视频 安装 简单模式入门案例 环境搭建 生产者代码 消费者代码 测试 工作队列模式入门案例 创建公共类(复用代码) 消费者代码 生产者代码 测试 消息应答 自动应答 手动应答 消息自动重 ...
- 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书
缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...
- 一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...
最新文章
- Taylor泰勒级数
- excel单元格下拉菜单
- 安装windows2003+SQL Server2005集群
- 鸿蒙os来了,华为操作系统“鸿蒙OS”来了!
- 动态规划——删除并获得点数(Leetcode 740)
- FZU 2082 过路费(树链剖分 边权)题解
- python爬取知乎用户信息_python爬取知乎用户总结
- android 修改 dpi_努比亚 Z11|魔趣100|安卓10.0|归属地|机型修改|性能调整|稳定流畅...
- 5分钟入门ER/Studio
- 理解手机中的感应器模块:重力感应/光线感应/电子罗盘/陀螺仪模块功能
- 《认知觉醒》 读书笔记
- powerbuilder建数据库
- Spine使用外部图片动画换肤
- 下载谷歌play应用_在Google Play控制台上为应用设置发布并发布到内部曲目
- 11、有线接入网技术
- 【JAVA】水仙花数
- ucGUI 重绘分析(一)
- php 股票信息查询类
- js中Boolean值为false和true的情况:
- ToB创业,要借什么势?
热门文章
- 二叉树的应用——赫夫曼树
- ST FOC电机控制同步电角度测试说明
- 【算法设计zxd】第2章 分析基础——渐近的界,基本效率类型
- 漫谈关系,制度和效率
- C语言小项目--打地鼠
- easylogging++的那些事(四)源码分析(二)日志记录宏(一)CLOG宏(一)宏展开
- objection - 基于frida的命令行hook工具食用手册
- objection 使用方法
- 取消计算机用户密码页面,电脑怎么关闭开机密码_电脑开机取消登录密码的两种方法-系统城...
- 2021年道路运输企业安全生产管理人员复审考试及道路运输企业安全生产管理人员证考试