rabbitmq相关理解

rabbitmq安装:很扯淡,erlang与rabbitmq的版本一定要对应。

https://www.jianshu.com/p/2f733ec8b117    安装按照这个来,我的erlang版本选择的是20.0这个

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz


启动服务:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server  -detached 】
重启服务:rabbitmq-server restart
关闭服务:rabbitmqctl stop
查看状态:rabbitmqctl status
列出角色:rabbitmqctl list_users
开启某个插件:rabbitmq-pluginsenable xxx
关闭某个插件:rabbitmq-pluginsdisablexxx
注意:重启服务器后生效。

现在用的springboot是2.0.3版本,如果使用的是2.3.0版本,下面回调函数配置:spring.rabbitmq.publisher-confirms-true 已过期。需要换成spring.rabbitmq.publisher-confirm-type=correlated
效果实验了一下,是一样的效果


rabbitmq的深入教学:
(1)Direct直连型的:就是一个队列对应一个交换机,没有匹配类型,队列要注入bean,交换机是Direct开头的,也要注入bean,绑定binding也要注入bean。
             Direct开头的,就是直连型的。routing绑定键现在还不是关键。
             注意事项:接收消息地方需要监听器,监听器上面是队列名称,一个监听器只能监听一个队列的消息。


             
(2)topic主题的:几个队列对应一个交换机,每个队列需要注入bean,交换机是Topic开头的,也要注入bean,每个队列都要绑定交换机,就等于有多少个队列,就要注入绑定多少次。
                  注意:这里就是一对多的情况,routing绑定键起作用了,因为队列都在一个交换机里面,所以根据routing绑定键可以实现一条消息被多个队列接收。
                        top.#    top开头的routing,都会被该绑定键绑定的队列接收
                        当一个队列的绑定键为 "#"(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。
                        当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。
                        *  (星号) 用来表示一个单词 (必须出现的)
                        #  (井号) 用来表示任意数量(零个或多个)单词

(3)fanout扇形:同样道理,有几个队列就需要注入多少,交换机就是Fanout开头的,也要注入bean,每个队列绑定交换机也需要注入bean。
                 这种情况,就是生产者推送一条信息,只要绑定在扇形交换机上面的队列,都可以接收到。
                 
(4)header交换机:取消routingkey绑定键,使用header里面的key-value形式匹配队列。
                 
                 
                 
消息确认以及消息回调:这次是重点
                      生产者添加配置文件:
                                            #确认消息已发送到交换机(Exchange)
                                            spring.rabbitmq.publisher-confirms=true
                                            #确认消息已发送到队列(Queue)
                                            spring.rabbitmq.publisher-returns=true


配置好了之后,需要写回调函数:详情看代码,没啥难理解的
                            ①消息推送到server,但是在server里找不到交换机       只会返回交换机的back
                            ②消息推送到server,找到交换机了,但是没找到队列     两个都会返回
                            ③消息推送到sever,交换机和队列啥都没找到            只会返回交换机的back
                            ④消息推送成功                                        只会返回交换机的back

上面这种是自动,还有一种手动,后期在搞,只要保持略懂


rabbitmq的好处:

                1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

                2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

                3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

如何保证RabbitMQ消息的顺序性?
答:单线程消费保证消息的顺序性;对消息进行编号,消费者处理消息是根据编号处理消息;


RabbitMQ 概念里的 channel、exchange 和 queue 是逻辑概念,还是对应着进程实体?分别起什么作用?

        queue 具有自己的 erlang 进程;
        exchange 内部实现为保存 binding 关系的查找表;
        channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给 queue 。
        由 AMQP 协议描述可知,channel 是真实 TCP 连接之上的虚拟连接,所有 AMQP 命令都是通过 channel 发送的,且每一个 channel 有唯一的 ID。
        一个 channel 只能被单独一个操作系统线程使用,故投递到特定 channel 上的 message 是有顺序的。但一个操作系统线程上允许使用多个 channel 。

rabbitmq的RPC回调模式:RPC模式还是要使用dubbo


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值