RabbitMQ

RabbitMQ 概述及注意

RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。

RabbitMQ 服务器是用 Erlang 语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

总结:RabbitMQ 实现了 AMQP 协议来构建自己的消息队列
RabbitMQ 是 Erlang 语言写的,但是我们有操作 RabbitMQ 的 java 的驱动

面试问题: Activemq 和 RabbitMq 的区别

根本的区别:Activemq 他实现的是 JMS 协议(Java 消息协议)
RabbitMQ 实现的是 AMQP 协议(高级消息队列协议)
Activemq : 是 Java 写的
RabbitMQ : Erlang 写的: 吞吐更多,延时更低!

MQ的特点

1. 异步处理:

   消息发送者可以发送一个消息而无需等待响应。消息发送者把消息发送到一条虚拟的通道(主题或队列)上;

    消息接收者则订阅或监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出回应。整个过程都是异步的。

2. 解耦服务:

   发送者和接收者不必了解对方,只需要确认消息。发送者和接收者不必同时在线。

3. 流量削峰:

    设置流程缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮。

MQ的大致流程

发送者把消息发给消息服务器,消息服务器把消息存放在若干队列/主题中,在合适的时候,消息服务器会把消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,发送者和接受者的生命周期也没有必然关系在发布 pub/订阅 sub 模式下,也可以完成一对多的通信,可以让一个消息有多个接受者[微信订阅号就是这样的]。

MQ的安装

下载Erlang的rpm包

RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ版本匹配。
https://www.rabbitmq.com/which-erlang.html

下载socat的rpm包
rabbitmq安装依赖于socat,所以需要下载socat。
socat下载地址:http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm

下载RabbitMQ的rpm包
RabbitMQ下载地址:https://www.rabbitmq.com/download.html(根据自身需求及匹配关系,下载对应rpm包)rabbitmq-server-3.8.1-1.el7.noarch.rpm

安装Erlang、Socat、RabbitMQ

一般都是吧压缩吧放到 /opt/rabbitmq下

①rpm -ivh erlang-21.3.8.9-1.el7.x86_64.rpm
②rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm
在安装rabbitmq之前需要先安装socat,否则,报错。
可以采用yum安装方式:yum install socat,我们这里采用rpm安装方式
③rpm -ivh rabbitmq-server-3.8.1-1.el7.noarch.rpm

/usr/lib/rabbitmq/bin/

启用管理插件

rabbitmq-plugins enable rabbitmq_management

修改主机名

vim /etc/hostname

在这里插入图片描述

vim /etc/hosts
在这里插入图片描述
在这里插入图片描述

启动RabbitMQ

systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
systemctl restart rabbitmq-server.service
systemctl stop rabbitmq-server.service

创建新的用户
在这里插入图片描述

测试
在本地输入虚拟机ip:15672

RabbitMQ的端口号

端口作用
5672客户端连接端口号
25672集群
15672后台管理系统

改成 / 虚拟主机
在这里插入图片描述
在这里插入图片描述

RabbitMQ的五种模式

在这里插入图片描述
在这里插入图片描述

发布订阅模式、路由模式、通配符模式,三种模式都使用交换机

交换机的类型
Fanout:广播、将消息交给所有绑定到交换机的队列(用在发布订阅模式)
Direct:定向、把消息交给符合指定 routing key 的队列(用在路由模式)
Topic :通配符、把消息交给符合 routing pattern (路由模式)的队列(用在通配符模式)

通配符规则
#:匹配零个或多个词
*:匹配1个词

RabbitMQ高级特性

消息的可靠投递

消息的发送方希望杜绝任何消息丢失或者投递失败。RabbitMQ提供了两种方式来控制消息的投递可靠性模式

  • confirm 确认模式
  • return 退回模式

rabbitmq 整个消息投递的路径为:

producer—>rabbitmq broker—>exchange—>queue—>consumer

l消息从 producer 到 exchange 则会返回一个 confirmCallback
l消息从 exchange–>queue 投递失败则会返回一个 returnCallback

Consumer Ack

ack指Acknowledge,确认。 表示消费端收到消息后的确认方式。
有二种确认方式:
自动确认:acknowledge=“none” 默认
手动确认:acknowledge=“manual”

其中自动确认是指,当消息一旦被Consumer接收到,则自动确认收到,并将相应 message 从 RabbitMQ 的消息缓存中移除。但是在实际业务处理中,很可能消息接收到,业务处理出现异常,那么该消息就会丢失。

如果设置了手动确认方式,则需要在业务处理成功后,调用channel.basicAck(),手动签收,如果出现异常,则调用channel.basicNack()方法,让其自动重新发送消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值