RabbitMQ

目录

启动

队列创建

1、通过管理页面来创建

生产者

代码

 消费者

1、代码

2、应答机制

 工作队列

消息持久化

 虚拟主机

 发布与订阅模式

fanout:广播模式

直连模式(director )

 主题模式

 总结

集群

基础集群

镜像队列

总结


 

交换空间(交换机:Exchange)控制队列,一个交换机可以控制多个队列;

queue:数据队列;

routingKey:如果所有队列的routingKey都一样,则是广播模式,如果不一样则是点对点模式;

 vhost:虚拟主机,可以在同一个消息服务中用vhost划分不同的区域,各个区域完全独立;可以更好的实现权限和用户管理工作

启动

        需要在linux中安装并启动

1、启动rabbitMQ-server

2、默认情况下RabbitMQ启动的时候是不启动webserver的,需要启动rabbitMQ-plugins

 启动了一个webserver之后,可以直接在浏览器中访问ip:15672;(自带监控-页面)

队列创建

1、通过管理页面来创建

消息保存类型:持久化是如果服务宕机重启后没有被消费的消息还在,瞬时状态是如果消息还没有被消费服务宕机后重启后消息就不存在了;

自动删除:消息被消费后消息是否自动删除;

生产者

代码

 消费者

1、代码

2、应答机制

如果配置了该机制,消费者取走消息之后会告诉服务器,此时服务器就可以将消息删除掉了;

2、1优点

        消息的可靠性提高

2.2缺点

        性能有所影响

2.3代码

 工作队列

普通队列消息:当有一个生产者和多个消费者时,多个消费者公共消费同一个生产者的消息;自动进行负载均衡设计;--保证消费消息的速度

消息持久化

如果要持久化数据,如要添加如下参数

 虚拟主机

用户可以创建自己的虚拟主机,如果不指定则会为默认的虚拟主机;每个虚拟主机里有自己的队列信息;

1、通过控制台创建(创建虚拟主机并为其追加用户),只有被分配的用户才能操作该虚拟主机;

2、通过命令行

 3、代码设置虚拟主机

 发布与订阅模式

        消息系统中除了有队列消息外一定会有主题消息,

        主题消息:同一条消息可以被主题下所有的消费者消费--是由exchange控制;

        exchange:1、接收生产者生产的消息;2、负责向队列进行消息推送;

        exchange类型:topic、director 、fanout;

fanout:广播模式

        一条消息被所有的消费者消费(问题:不同虚拟机呢?)

    代码

1、此时生产者就不需要队列信息了,而是将消息发送到交换机中,如下修改

 2、消费者代码修改,消费者还是需要从队列中获取消息,所有要绑定如有和队列然后消费;

 以上进行绑定处理时,routingKey要保证一致,不然接收不到消息;

直连模式(director )

代码

生产者

消费者

 主题模式

主题模式也相当于一种广播模式,只要控制好exchange和routingKey就相当于实现了所以的处理模式;

实现方式都差不多

代码

生产者

消费者

 总结

        几种模式只要控制好exchange和routingKey就相当于实现了所以的处理模式;也是常见的使用模式;

集群

        rabbitMQ集群本身不带有HA和负载功能,如果想要实现HA需要使用其他组件,如:HAProxy、LVS、keepalived等组件;

        集群设计分为两类:普通集群、镜像队列

基础集群

1、必须保障所有主机的erlang.cookie信息一致(目录为:~/.erlang.cookie)

2、启动所有机器的rabbitMQ服务

3、配置集群(主从服务配置)

3.1停止掉主服务外的所有服务的app服务(只停止app服务,rabbitMQ没有停止)

 3.2从服务器添加主服务器信息

3.3启动从服务器的app

3.4查看主服务集群状态

 可以看到有三台服务器,配置过程有点像redis主从配置;

4、添加一个新的用户并为其设置到管理员组

        在主服务器上执行即可

 5、程序在配置rabbitMQ地址时,信息只能的主服务器地址;

镜像队列

但rabbitMQ没有HA和负载功能,所以需要借助其他组件来实现,镜像队列只是保证了集群不同主机的消息一致性,

 

总结

        RabbitMQ没有HA和负载功能,集群中如果主服务挂掉,则消息就不能被消费了,即便其他主机没有挂掉,如果要实现HA则需要借助其他组件,如HAProxy、LVS、keepalived等组件;

 

注:

1、普通队列模式下,生产者将消息发送到了队列中;

2、广播模式下,生产者将消息发送到交换机中;exchange通过绑定交换机和key来实现消息分发;

问题:

1、消息重复消费问题

2、直连模式如果有多个消费者的key相同,会同时消费同一条消息吗?如果可以那和广播模式有什么区别呢?

3、基础集群是主从吗?机制是什么如果主服务挂掉后怎么运行呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值