RabbitMQ

112 阅读2分钟

我正在参加「掘金·启航计划」

1.RabbitMQ概述

RabbitMQ:作为一个项目不常用到的中间件,可以使用docker安装使用,mac上安装rabbitMQ的方法可以参照docker安装RabbitMq

  • 是什么:一种开源(MPL)的消息代理,一种面向消息的中间件,一种默认遵循AMQP协议的MQ服务

  • 做什么:解决逻辑耦合,异步任务;消息持久化,重启不影响;削峰,大规模消息处理

  • 特点:可靠性:持久化,传输确认,发布确认;可扩展性:多个节点可以组成一个集群,可以动态更改;多语言客户端:几乎支持所有常用语言;管理界面:医用的用户界面,便于管理和监控

2. 工作原理

  • 关键术语:

    • Broker:消息队列服务进程。此进程包括两个部分:Exchange和Queue
    • Exchange:消息交换机,决定消息按什么规则,路由到哪个队列
    • Queue:消息载体,每个消息都会被投到一个或多个队列
    • Binging:绑定消息,通常发生在Exchange收到消息之后,会根据routing key路由到跟当前交换机绑定的相匹配的队列里面
    • Producer:消息生产者。生产方客户端将消息同交换机路由发送到队列中。
    • Consumer:消息消费者。消费队列中存储的消息。
  • 工作模式:

    • Fanout:交换机需要将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。可以理解为发布订阅。
    • Direct:此交换机需要绑定一个队列,要求该消息与一个特定的路由键完全匹配* *
    • Topic:这种交换机是使用通配符去匹配,路由到对应的队列。通配符有两种:"*" 、 "#"。需要注意的是通配符前面必须要加上"."符号。
    • Headers:它跟上面三种有点区别,它的路由不是用routingKey进行路由匹配,而是在匹配请求头中所带的键值进行路由

3. 使用

遇到报错

172.17.0.2:5672, vhost: '/', user: 'guest'): 原因是用户guest的权限不够,需要进行设置

  1. docker exec -it '自己运行的docker container id' /bin/bash
  2. rabbitmqctl set_permissions -p '/' guest '.*' '.*' '.*'

页面操作

启动后可以登陆http://0.0.0.0:15672/#/, 进入页面操作,用户名密码默认为guest,guest。也可以自己创建账号设置权限,可以参考docker安装RabbitMq的后半部分

  1. 增加交换机 image.png

  2. 增加消息队列

image.png 2. binding页面和发送信息页面 点击进入新创建的Exchanges,就可以进行bindings和publish操作 image.png

  • binding设置路由匹配的key image.png

  • 传输消息成功 image.png

  • 传输消息失败

image.png

go使用

  1. 构建生产者
  2. 构建消费者
  3. 代码里使用

参考资料

mac上安装rabbitMQ

RabbitMQ入门以及工作模式大java代码实现

RabbitMQ防止数据丢失