下图展示了生产者将消息存入 RabbitMQ Broker,以及消费者从Broker中消费数据的整个流程。
这样图1中的一些关于 RabbitMQ 的基本概念我们就介绍完毕了,下面再来介绍一下 Exchange Types(交换器类型) 。
5)Exchange Types(交换器类型)
RabbitMQ 常用的 Exchange Type 有 fanout、direct、topic、headers 这四种(AMQP规范里还提到两种 Exchange Type,分别为 system 与 自定义,这里不予以描述)。
① fanout
fanout 类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中,不需要做任何判断操作,所以 fanout 类型是所有的交换机类型里面速度最快的。fanout类型常用来广播消息。
② direct
direct 类型的Exchange路由规则也很简单,它会把消息路由到那些 Bindingkey
与 RoutingKey
完全匹配的 Queue 中。
以上图为例,如果发送消息的时候设置路由键为“warning”,那么消息会路由到 Queue1 和 Queue2。如果在发送消息的时候设置路由键为"Info”者"debug”,消息只会路由到Queue2。如果以其他的路由键发送消息,则消息不会路由到这两个队列中。
direct 类型常用在处理有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
③ topic
前面讲到direct类型的交换器路由规则是完全匹配 BindingKey
和 RoutingKey
,但是这种严格的匹配方式在很多情况下不能满足实际业务的需求。topic类型的交换器在匹配规则上进行了扩展,它与 direct 类型的交换器相似,也是将消息路由到 BindingKey
和 RoutingKey
相匹配的队列中,但这里的匹配规则有些不同,它约定:
- RoutingKey 为一个点号“.”分隔的字符串(被点号“.”分隔开的每一段独立的字符串称为一个单词),如
“com.rabbitmq.client”
、“java.util.concurrent”
、“com.hidden.client”
; - BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串;
- BindingKey 中可以存在两种特殊字符串“”和“#”,用于做模糊匹配,其中“”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。
以上图为例:
- 路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queuel 和 Queue2;
- 路由键为 “com.hidden.client” 的消息只会路由到 Queue2 中;
- 路由键为 “com.hidden.demo” 的消息只会路由到 Queue2 中;
- 路由键为 “java.rabbitmq.demo” 的消息只会路由到Queuel中;
- 路由键为 “java.util.concurrent” 的消息将会被丢弃或者返回给生产者(需要设置 mandatory 参数),因为它没有匹配任何路由键。
④ headers(不推荐)
headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers属性进行匹配。在绑定队列和交换器时制定一组键值对,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式)'对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
参考资料:《Java中高级核心知识全面解析》
获取方式:私信【资料】
免费获取
还有更多Java PDF学习资料等你来拿!!!
二、安装 RabbitMq
通过 Docker 安装非常方便,只需要几条命令就好了,我这里是只说一下常规安装方法。
前面提到了 RabbitMQ 是由 Erlang语言编写的,也正因如此,在安装RabbitMQ 之前需要安装Erlang。
注意:在安装 RabbitMQ 的时候需要注意 RabbitMQ 和 Erlang 的版本关系,如果不注意的话会导致出错,两者对应关系如下:
1.安装 erlang
1)下载 erlang 安装包
在官网下载然后上传到 Linux 上或者直接使用下面的命令下载对应的版本。
[root@SnailClimb local]#wget http://erlang.org/download/otp_src_19.3.tar.gz
2)解压 erlang 安装包
[root@SnailClimb local]#tar -xvzf otp_src_19.3.tar.gz
3) 删除 erlang 安装包
[root@SnailClimb local]#rm -rf otp_src_19.3.tar.gz
4)安装 erlang 的依赖工具
[root@SnailClimb local]#yum -y install make gcc gcc-c++ kernel-devel m4 ncurses- devel openssl-devel unixODBC-devel
5)进入erlang 安装包解压文件对 erlang 进行安装环境的配置
新建一个文件夹
[root@SnailClimb local]# mkdir erlang
对 erlang 进行安装环境的配置
[root@SnailClimb otp_src_19.3]#
./configure --prefix=/usr/local/erlang --without-j
6)编译安装
[root@SnailClimb otp_src_19.3]#
make && make install
7)验证一下 erlang 是否安装成功了
[root@SnailClimb otp_src_19.3]# ./bin/erl
运行下面的语句输出“hello world”
io:format(“hello world~n”, []).
大功告成,我们的 erlang 已经安装完成。
8)配置 erlang 环境变量
[root@SnailClimb etc]# vim profile
追加下列环境变量到文件末尾
#erlang
ERL_HOME=/usr/local/erlang
PATH=
E
R
L
H
O
M
E
/
b
i
n
:
ERL_HOME/bin:
ERLHOME/bin:PATH
export ERL_HOME PATH
运行下列命令使配置文件 profile
生效
[root@SnailClimb etc]# source /etc/profile
输入 erl 查看 erlang 环境变量是否配置正确
[root@SnailClimb etc]# erl
2.安装 RabbitMQ
1)下载rpm
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server- 3.6.8-1.el7.noarch.rpm
2)安装rpm
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
紧接着执行:
yum install rabbitmq-server-3.6.8-1.el7.noarch.rpm
中途需要你输入"y"才能继续安装。
3)开启 web 管理插件
rabbitmq-plugins enable rabbitmq_management
4)设置开机启动
chkconfig rabbitmq-server on
5)启动服务
service rabbitmq-server start
6)查看服务状态
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
[外链图片转存中…(img-mQiw4YJH-1712086716997)]
[外链图片转存中…(img-wFB6UoYJ-1712086716998)]
[外链图片转存中…(img-C1yRt0lg-1712086716998)]