刚刚用了,记录下来,以后忘了,方便能够快速想起来。

首先说明,由于RabbitMQ服务端非JAVA,C++语言,当然也就看不懂,所以本文的理解都是过于主观的。

  • 一,RabbitMQ服务端搭建

    推荐最好的安装方式:去官网,去官网,去官网,重要的事情说三遍。

    我一般的操作流程是:用google右上角翻译网页,然后看个大概意思,然后再显示原网页,一个单词单词的看。

    还是总结一下Ubuntu,RabbitMQ安装步骤(依次执行下面四条命令就ok了):

,echo 'deb http://www.rabbitmq.com/debian/ testing main' |
sudo tee /etc/apt/sources.list.d/rabbitmq.list
,wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
sudo apt-key add -
,sudo apt-get update
,sudo apt-get install rabbitmq-server
  • 二,服务端基本配置

    服务端配置,基本上不需要配置就能满足大多数需求。官网如是说,且相信他一次   

    2.1 界面管理插件的安装

    先说一下ubuntu目录下面的日志目录,与脚本目录,一般这是我们最关心的目录:

    1,日志目录: /var/log/robbitmq-server 可以通过/etc/logrotate.d/rabbitmq-server进行配置
    2,脚本目录:/usr/lib/rabbitmq/bin/

    然后进入到脚本目录也就是(cd /usr/lib/rabbitmq/bin/),执行如下命令

      rabbitmq-plugins enable rabbitmq_management

    这样管理插件算是装好了。

    2.2 用户管理

    通过http://localhost:15672登录会发现(默认用户guest,密码也是guest),认证失败(登录失败去日志文件查找原因)。

    然后自然需要授权了,给一个授权的命令demo,详情自行脑补:   

     #username就是用户名,可以随便取,pwd就是你要设置的密码
rabbitmqctl add_user username pwd
#administrator为用户的角色,与tomcat那种管理员配置有点像
rabbitmqctl set_user_tags username administrator
#授予权限 /代表vhost主机根目录,后面的*j就是读写之类的权限
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

    授权之后,讲道理就能登录了,可以看到下面这样的界面:

  • 三,RabbitMQ的工作原理(例子稍后奉上)

    先体验一下整个消息投递过程:

    

    3.1 RabbitMQ的核心:

    核心官网有介绍,说的connecnton,channel之类的,到底怎么样,who care? 

    总体来看,我们关注业务实现是:1)消息怎么投递的。2)消费者怎么消费消息。3)消息是否是可靠投递。4)消息投递方式。5)消息的生命周期。6)消息队列生命周期

    3.2  消息是怎么投递的?(记住一点,生产者消息投递都是面向交换机的)

    RabbitMQ 是面向交换机投递消息的。交换机可能绑定有许多队列,交换机如何将消息投递给这些队列呢?

    首先说一下面向交换机的设计的优势:1)这明显借助了数据链路层那个交换机的设计思想。除了层级分明以外,还能从分提高链路利用率(可能有点抽像)。

                     2)从代码层面来看:如果没有交换机,你至少得维护一个十分庞大的路由表,然后从路由表正确投递消息,有了交互机,这里路

                      由表就会被拆分到多个交换机里面,效果不必多说。

                       3)然后就是高度的解耦,不同的交换机可有不同的路由规则,要是没有交换机。。。。。。

    在RabbitMQ,交换机有4种投递方式,就是枚举类BuiltinExchangeType的4个枚举变量:

       DIRECT:会将所有消息先取消息的ROUTE_KEY,然后投递到与ROUTE_KEY绑定的队列里面(if(msg.routekey.equals(queue.routekey)))。

    FANOUT:此种模式下,根本不检查消息的ROUTE_KEY,直接投送到交换机所拥有的所有队列里面。

    TOPIC,HEADERS自行看一下官网怎么说的,不想码字了^_^||

    总结起来就一个函数就把消息发出去了:channel.basicPublish(excange_name,route_key,false,bs,"test".getBytes());可以去官网查一下这个API

    3.3 消费者怎么消费消息(记住一点,消费者消费消息是面向消息队列的,这与生成者有点不一样)

    还不是就是TCP长连接心跳的那些事,就是这么一个API:channel.basicConsume(QUEUE_AUTODELETE, true, consumer);consumer是Consumer类的一个实例,

    你直接去处理回调接口就ok了

    3.4 消息传递是否可靠

    很明显是可靠的,除非你将消息队列,声明成非持久模式,这事你又重启了机器。这会丢失消息的。还有就是他有应答机制,你可以通过设置消费者消费消息的模式,

    去手动应答。channel.basicConsume(?,autoACk,?)的autoAck参数设置

    3.5 消息的生命周期

    一旦受到消费者应答,标识消息已被消费,则消息被回收掉。

    3.6 队列生命周期

    channel.queueDeclare(QUEUE_NAME,false,false,true,null);

    第二个参数设置为true,会将消息持久化到磁盘,第四个参数设置为true表示没有消息并且没有连接则删除改队列,详情可以查一下API

  • 四、一个示例

    4.1 生产者代码:

      自行导入相关依赖包或相关依赖

      

      ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("username");
factory.setPort(5672);//注意这里的端口与管理插件的端口不一样
factory.setPassword("pwd");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明一个dirent模式的交换机
channel.exchangeDeclare("exchange_name",BuiltinExchangeType.DIRECT,true);
//声明一个非持久化自动删除的队列
channel.queueDeclare("queue_name",false,false,true,null);//如果该队列不在被使用就删除他 zhe
//将绑定到改交换机
channel.queueBind("queue_name","exchange_name","route_key");
//声明一个消息头部
Map<String,Object> header=new HashMap<>();
AMQP.BasicProperties.Builder b= new AMQP.BasicProperties.Builder();
header.put("charset","utf-8");
b.headers(header);
AMQP.BasicProperties bp=b.build();
//将消息发出去
channel.basicPublish("exchange_name","route_key",false,bp,"test3".getBytes());

    4.2 消费者代码

      ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("username");
factory.setPort(5672);//注意这里的端口与管理插件的端口不一样
factory.setPassword("pwd");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明一个dirent模式的交换机
channel.exchangeDeclare("exchange_name",BuiltinExchangeType.DIRECT,true);
//声明一个非持久化自动删除的队列
channel.queueDeclare("queue_name",false,false,true,null);//如果该队列不在被使用就删除他 zhe
//将绑定到改交换机
channel.queueBind("queue_name","exchange_name","route_key");
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);

  

    

RabbitMQ使用详解的更多相关文章

  1. .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 详解)--学习笔记

    2.6.7 RabbitMQ -- Masstransit 详解 Consumer 消费者 Producer 生产者 Request-Response 请求-响应 Consumer 消费者 在 Mas ...

  2. RabbitMQ Exchange详解以及Spring中Topic实战

    前言 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦. 业务需求 ...

  3. 分享 rabbitMQ入门详解

    原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...

  4. RabbitMQ安装详解

    # RabbitMQ 消息中间件 一.安装:#安装epel源[EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包)rpm -Uvh htt ...

  5. RabbitMq入门详解

    因为项目中需要用到RabbitMq,所有花时间研究了下,虽然博客园已经有前辈写了关于RabbitMq的文章.但还是有必要研究下! 什么是RabbitMq? 百度解释:MQ全称为Message Queu ...

  6. spring集成RabbitMQ配置文件详解(生产者和消费者)

    1,首先引入配置文件org.springframework.amqp,如下: <dependency> <groupId>org.springframework.amqp< ...

  7. RabbitMQ安装详解(centos6.8)(转自:http://www.cnblogs.com/zhen-rh/p/6862350.html)

    1.下载rabbitmq安装包 2.安装erlang a.安装Erlang Solutions仓库到你的系统(目的在于让你可以使用yum安装到最新版本的erlang, 如果不设置, yum安装的erl ...

  8. RabbitMQ技术详解(转)

    RabbitMQ是什么 定义 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Action ...

  9. RabbitMQ入门详解以及使用

    目的: RabbitMQ简介 RabbitMQ安装及使用 Centos安装 Docker安装(今天选择Docker安装方法) RabbitMQ快速入门 交换机 RabbitMQ简介 各大主流中间件对比 ...

随机推荐

  1. oracle 删除外键约束 禁用约束 启用约束

    oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码  select 'alter table '||table_name||' drop con ...

  2. Git的使用详解

    起步 关于版本控制 Git 简史 Git 基础 安装 Git 初次运行 Git 前的配置 获取帮助 小结 Git 基础 取得项目的 Git 仓库 记录每次更新到仓库 查看提交历史 撤消操作 远程仓库的 ...

  3. Git仓库创建和文件提交

    参考质料:廖雪峰的个人网站 Git 什么是Git:一个分布式版本管理系统: 作用:管理你的历史文件,文件修改历史,团队协作. Windows下安装Git: 到链接下载安装包,国内镜像 云盘 安装完成后 ...

  4. merge 语法解析

    merge into 支持sqlserver 2008 和以上的版本 无论是INSERT还是UPDATE,从执行之间上看,MERGE INTO(MERGE)都要比直接INSERT/UPDATE的效率高 ...

  5. Excel开发之旅

    开发环境:Microsoft Visual Studio 2015,Office 2013 开发语言:C# 1.创建工程:文件à新建à项目,选择office 外接程序àExcel 2013和2016 ...

  6. ActiveMQ 入门helloworld

    1.下载安装ActiveMQ 官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Unix 等几个版本 ...

  7. SSM之框架整合

    前言 SSM框架,即Spring + Spring MVC + MyBatis的整合框架集,是继SSH后比较主流的Java EE企业级框架,采用标准的MVC模式,项目结构与微软的ASP.NET MVC ...

  8. PyTorch教程之Training a classifier

    我们已经了解了如何定义神经网络,计算损失并对网络的权重进行更新. 接下来的问题就是: 一.What about data? 通常处理图像.文本.音频或视频数据时,可以使用标准的python包将数据加载 ...

  9. LeetCode-2 Keys Keyboard

    package Classify.DP.Medium; import org.junit.jupiter.api.Test; /** Initially on a notepad only one c ...

  10. 记录一次因为硬盘写满造成的redis无法连接

    缘起: 今天早晨收到报警,服务不干活了,赶紧起来看问题... 为了尽快让服务可用,尝试重启服务,发现服务起不来,报错 redis connection failed! 看起来是redis挂了,但是发现 ...