资讯专栏INFORMATION COLUMN

RabbitMQ二三事

JeOam / 2169人阅读

摘要:路由关键字根据这个关键字进行消息投递。则就是根据不同路由键,把消息发送到某一类队列中。关于的一个重要注意事项是它根据所谓的节点名称存储数据,默认为主机名。

RabbitMQ概览

RabbitMQ是一个高性能的分布式消息中间件。它由Erlang编写,这种语言天生支持分布式,而且性能极高(但是比较难上手)。

通信概念

RabbitMQ简单理解就是一个队列服务,我们的生产者不断地往它投递消息,而消费者不断地从它那里获取消息。但相较于利用redis的List这类简单队列,RabbitMQ的消息投递更灵活一点。首先需要知道一些RabbitMQ中的通信概念:

exchange(交换器)

queue(队列):消息队列载体,每个消息都会被投入到一个或多个队列。

binding(绑定):它的作用就是把exchange和queue按照路由规则绑定起来。

routing key(路由关键字):exchange根据这个关键字进行消息投递。

vhost(虚拟主机):不同的vhost下,数据完全隔离,默认vhost为“/”

channel(信道):在一个tcp连接下,可建立多个channel,每个channel代表一个会话任务。

producer(生产者)

consumer(消费者)

RabbitMQ中Exchange类似于一个路由器,我们的consumer并不会把消息直接投递给队列,而是投递给exchangeexchange根据我们投递时的路由键(routing key)再发送到特定的队列。这样的设计让消息可以灵活选路,发送到某一类的队列中,形成一对多的关系,而不仅仅是一对一。

Exchange

所以说RabbitMQ中的exchange很方便,很强大,它有这样几种类型:

direct

fanout

topic

headers(几乎用不到)

direct交换器很简单,有时候我们仅仅需要一个很简单的队列(消息投递到其中,然后不断消费它),这时候我们就可以用direct交换器,它的规则是:如果路由键匹配,消息就会被投递到对应的队列。

fanout交换器忽略路由键,把消息同时发到一批队列。

topic则就是根据不同路由键,把消息发送到某一类队列中。

快速安装

这里我使用docker安装RabbitMQ
docker-compose.yml

version: "2"
services:
  mq:
    image: rabbitmq:3.7.8-management
    restart: always
    mem_limit: 2g
    hostname: mq1
    volumes:
      - ./mnesia:/var/lib/rabbitmq/mnesia
      - ./log:/var/log/rabbitmq
      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
    ports:
      - "55672:15672"
      - "56720:5672"
    environment:
      - CONTAINER_NAME=rabbitMQ
      - RABBITMQ_ERLANG_COOKIE=3t182q3wtj1p9z0kd3tb

rabbitmq.conf

loopback_users.guest = false
listeners.tcp.default = 5672
default_pass = WbsWebZVOzE5A1Bd
default_user = test
hipe_compile = false
management.listener.port = 15672
management.listener.ssl = false

注意,5672端口是AMQP Client(也就是我们程序使用的)端口,15672是管理插件的web端口。
mnesia文件夹是RabbitMQ存放数据的地方。
关于RabbitMQ的一个重要注意事项是它根据所谓的节点名称存储数据,默认为主机名。
当前节点会在该目录下建立一个rabbit@node-name的文件夹,用来存放节点数据,node-name就是节点名字,默认为hostname(其实mnesia数据库是Erlang内置的一个DBMS,可以直接存储Erlang的各种数据结构),在上述例子中,这个目录名为rabbit@mq1(因为docker-compose中设置了hostnamemq1
5672端口映射到了宿主机的56720端口,15672端口映射到了宿主机的55672端口

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31105.html

相关文章

  • 文件上传三事

    摘要:选择文件谈到文件上传,不得不提,中文名叫表单。当需要使用回调函数来处理上传完成后后端返回的数据时,需要和后端预先达成约定,如,回调函数名,参数列表,等等。后端可以根据边界的检验,识别上传的文件,读取元数据中的文件属性,从而为验证提供数据。 引子 其实很早就开始酝酿这一篇了,无奈总是发现有缺漏的地方,遂努力恶补前端+后端+底层相关知识。今天终于可以发表了。 --跟生孩子一样啊。 选择文...

    wudengzan 评论0 收藏0
  • 与dom事件流相关的三事

    摘要:但对于整个事件流上的别的元素来说,执行顺序还会受到另外一个因素的影响。以上面的场景为例,在捕获阶段执行的事件,如果执行,则事件流终止,不会到达目标阶段,的世界则不会被执行执行结果为线上参考事件流 向dom绑定事件的事件的三种方式 行内绑定 按钮 js内绑定 btnDom.onclick = function clickHandler() { console.log(click)...

    Anleb 评论0 收藏0
  • NodeList 与 HTMLCollection 三事

    摘要:结构如下是的返回结果是的结果不要在意两个数量的区别,首先是快照,节点数量和类型的快照,就是对节点增删,感觉不到,但是对节点内部内容修改,是可以感觉到的,比如修改是绑定的,节点的增删是敏感的可写性问题直接对,进行赋值,是失败的元素是可读的,是 Dom 结构如下: 1.dsfs 2.dsfs 3.dsfs 5.dsf...

    melody_lql 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<