标签 rabbitmq 下的文章

“”

rabbitmq之一概念解释(信道、交换器和路由键、队列)
update:2021-9-9

一、 channel 信道:

  概念:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID
,保证了信道私有性,对应上唯一的线程使用。

       疑问:为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能,每秒成百上千的建立销毁TCP会严重消耗系统。所以rabbitmq选择建立多个信道(建立在tcp的虚拟连接)连接到rabbit上。

     类似概念:TCP是电缆,信道就是里面的光纤,每个光纤都是独立的,互不影响。

二、exchange 交换机和绑定routing key

  exchange的作用就是类似路由器,routing key 就是路由键,服务器会根据路由键将消息从交换器路由到队列上去。

  exchange有多个种类:direct,fanout,topic,header(非路由键匹配,功能和direct类似,很少用)。前三种类似集合对应关系那样,(direct)1:1,(fanout)1:N,(topic)N:1

  direct: 1:1类似完全匹配

  fanout:1:N 
可以把一个消息并行发布到多个队列上去,简单的说就是,当多个队列绑定到fanout的交换器,那么交换器一次性拷贝多个消息分别发送到绑定的队列上,每个队列有这个消息的副本。

     ps:这个可以在业务上实现并行处理多个任务,比如,用户上传图片功能,当消息到达交换器上,它可以同时路由到积分增加队列和其它队列上,达到并行处理的目的,并且易扩展,以后有什么并行任务的时候,直接绑定到fanout交换器不需求改动之前的代码。

  topic   N:1 ,多个交换器可以路由消息到同一个队列。根据模糊匹配,比如一个队列的routing key
为*.test ,那么凡是到达交换器的消息中的routing key 后缀.test都被路由到这个队列上。

三、结合信道、交换器和路由键到队列

  总结几点重要知识:1.信道才是rabbit通信本质,生产者和消费者都是通过信道完成消息生产消费的。2.交换器本质是一张路由查询表(名称和队列id,类似于hash表),这是一个虚拟出来的东西,并不存在真实的交换器。

  消息的生命周期:生产者生产消息A
交由信道,信道通过消息(消息由载体和标签)的标签(路由键)放到交换器发送到队列上(其实就是查询匹配,一旦匹配到了规则,信道就直接和队列产生连接,然后将消息发送过去)

Referenced from:https://www.huaweicloud.com/articles/12567586.html

RabbitMQ入门:路由(Routing) update:2021-9-9
fanout类型的exchange,它是一种通过广播方式发送消息的路由器,所有和exchange建立的绑定关系的队列都会接收到消息。但是有一些场景只需要订阅到一部分消息,这个时候就不能使用fanout
类型的exchange了

Direct Exchange(直接路由器) Direct Exchange,通过Routing
Key来决定需要将消息发送到哪个或者哪些队列中。 它是一种完全按照routing key(路由关键字)进行投递的:当消息中的routing
key和队列中的binding key完全匹配时,才进行会将消息投递到该队列中。

Referenced from:https://www.cnblogs.com/sam-uncle/p/9209666.html

参照RabbitMq官网的安装教程(Installing on Debian and Ubuntu),来进行安装。

sudo apt install erlang-nox

安装完成后执行

erl

Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1]

Eshell V10.6.4 (abort with ^G)

wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

sudo apt update
sudo apt install rabbitmq-server

安装完成后,查看服务状态

systemctl status rabbitmq-server

● rabbitmq-server.service - RabbitMQ Messaging Server

 Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
 Active: active (running) since Tue 2021-09-07 09:53:48 CST; 2 days ago

Main PID: 1581436 (beam.smp)

 Status: "Initialized"
  Tasks: 235 (limit: 18732)
 Memory: 95.7M
 CGroup: /system.slice/rabbitmq-server.service
         ├─1581432 /bin/sh /usr/sbin/rabbitmq-server
         ├─1581436 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 192 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db>
         ├─1581884 erl_child_setup 65536
         ├─1581943 inet_gethost 4
         └─1581944 inet_gethost 4

启动、停止、重启rabbitmq

sudo service rabbitmq-server start    # 启动
sudo service rabbitmq-server stop     # 停止
sudo service rabbitmq-server restart  # 重启 

执行了上面的步骤,rabbitMq已经安装成功。

启用 web端可视化操作界面,我们还需要配置Management Plugin插件

sudo rabbitmq-plugins enable rabbitmq_management   # 启用插件
sudo service rabbitmq-server restart    # 重启

此时,应该可以通过 http://localhost:15672/ 查看,使用默认账户guest/guest 登录。