RabbitMQ 2 理解消息通讯
交换器和绑定
交换器类型:direct fanout topic
direct很简单 如果路由键匹配的话 到对应的队列
fanout 交换器 会将受到的信息广播到绑定的队列上 将消息投递给所有在交换器上的队列
topic交换器 不同源头的信息到达同一个队列
虚拟主机和隔离:
vhost虚拟消息服务器 虚拟主机
通过在各个实例间提供逻辑分离 为不同应用程序安全保密的运行数据
是AMQP得概念得基础,你必须连接时进行指定 。
vhost和权限控制非常独特,他们是唯一无法通过amqp协议创建的基元
可以通过Rabbitmq安装路径下。/sbin/目录中的rabbitmqctl工具创建
一旦创建成功之后,就可以链接上去开始添加队列和交换器 通过vhost保障了队列和交换器得安全
队列和交换器默认情况下无法幸免于服务器重启 durable属性默认false true可以断电后不重新建立队列 但是设置为true还不够
能从崩溃中恢复的消息为持久化消息 在消息发布之前,通过它的投递模式选项设置为2来将消息标记为持久化。还必须通过持久化的交换器到达持久化的队列中才行
因此消息崩溃必须:
投递模式选选项设置为2(持久)
发送到持久化的容器
到达持久化的队列
不是所有的消息都需要持久化 ,写入磁盘要比写入内存慢不止一点点 也会减少RabbitMQ服务器每秒可处理的消息总数。使用就持久化机制导致消息吞吐量降低10倍也有可能。持久化消息在集群下工作得并不好。
什么情况下使用持久性/持久化消息呢?
首先你需要分析性能需求 你是否需要rabbitmq服务器每秒100000条消息呢 是就要确保消息投递
消息持久化相关得一个概念是amop事务 由于发布操作不返回信息 怎末知道服务器是否已经持久化消息到硬盘了呢?服务器可能在消息写入硬盘前就宕机了,消息因此丢失,你却不知道,这就是事务发挥作用得地方。
生产者得代码开始,需要完成以下任务: 消费者:
连接到rabbitmq 连接到rabbitmq
获取信道 获取信道
声明交换器 声明交换器
创建消息 声明队列
发布消息 队列交换器绑定
关闭信道 消费消息
关闭连接 关闭信道 关闭连接
使用发送方确认方式确认投递