摘要: 原贴 : http://blog.csdn.net/cws1214/article/details/52922267 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ 阅读全文
posted @ 2020-12-15 21:03 星火撩原 阅读(132) 评论(0) 推荐(0) 编辑
摘要: RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 RabbitMQ 开始支持队列(完整数据)复制.比如在有5个节点的集群里,可以指定某个队列的完整数据在2个 阅读全文
posted @ 2020-12-15 21:02 星火撩原 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 上篇文章把单机集群搭建好了,可以开始验证普通集群的相关功能了. 我们首先在管理后台(15672,15673 都可以)添加一个用户,并用新用户登录,添加一个虚拟主机 由于是在一台机器上模拟集群,所以我们把创建连接的工具类小改一下,将端口号作为入参. public static class Connec 阅读全文
posted @ 2020-12-15 21:01 星火撩原 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 拜读了网上很多前辈的文章,对RabbitMQ的集群有了一点点认识. 好多文章都说到,RabbitMQ的集群分为普通集群和镜像集群,有的还加了两种:单机集群和主从集群. 我看来看去,看了半天,怎么感觉,其实RabbitMQ的集群实际就一种:普通集群. 至于单机集群,无非是在一台机器上模拟普通集群, 镜 阅读全文
posted @ 2020-12-15 20:59 星火撩原 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 消费者确认解决的问题是确认消息是否被消费者"成功消费". 它有个前提条件,那就是生产者发布的消息已经"成功"发送出去了. 因此还需要一个机制来告诉生产者,你发送的消息真的"成功"发送了. 在标准的AMQP 0-9-1,保证消息不会丢失的唯一方法是使用事务:在通道上开启事务,发布消息,提交事务.但是事 阅读全文
posted @ 2020-12-15 20:57 星火撩原 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 由于生产者和消费者不直接通信,生产者只负责把消息发送到队列,消费者只负责从队列获取消息(不管是push还是pull). 消息被"消费"后,是需要从队列中删除的.那怎么确认消息被"成功消费"了呢? 是消费者从队列获取到消息后,broker 就从队列中删除该消息? 那如果消费者收到消息后,还没来得及"消 阅读全文
posted @ 2020-12-15 20:56 星火撩原 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 在远程计算机上运行一个函数并等待结果,我们通常叫这种模式为远程过程调用或者RPC. 通过 RabbitMQ 进行 RPC 很容易,客户端发送请求消息,服务器回复响应消息.为了接收响应,我们需要发送带有“回调”队列地址的请求. 同时,这里面涉及到几个比较重要的消息属性: 消息属性 Durable :  阅读全文
posted @ 2020-12-15 20:54 星火撩原 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 上篇文章讲了声明一个队列时的参数设置,这篇文章主要说一说发布消息时的参数设置. 发布消息时的完整入参是这样的: channel.BasicPublish ( exchange: "test_exchange", routingKey: "", mandatory: false, basicPrope 阅读全文
posted @ 2020-12-15 20:53 星火撩原 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 代码中,我们通常这样声明一个队列: //声明队列 channel.QueueDeclare ( queue: QueueName, //队列名称 durable: false, //队列是否持久化.false:队列在内存中,服务器挂掉后,队列就没了;true:服务器重启后,队列将会重新生成.注意:只 阅读全文
posted @ 2020-12-15 20:52 星火撩原 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 主题模式和路由模式很像 路由模式是精确匹配 主题模式是模糊匹配 依然先通过管理后台添加一个交换机. 生产者 public class Producer { private const string ExchangeName = "test_exchange_topic"; public static 阅读全文
posted @ 2020-12-15 20:50 星火撩原 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者和消费者的代码中就不需要再声明交换机了.同样,也可以通过管理后台添加队列,那么代码中也不需要声明队列 阅读全文
posted @ 2020-12-15 20:48 星火撩原 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 前面讲到了简单队列和工作队列. 这两种队列有个非常明显的缺点 : 生产者发送的消息,只能进入到一个队列. 消息只能进入到一个队列就意味着消息只能被一个消费者消费. 尽管工作队列模式中,一个队列中的消息可以被多个消费者消费,但是,具体到每一条消息,却只能被一个消费者消费. 如果想要一个消息被多个消费者 阅读全文
posted @ 2020-12-15 20:46 星火撩原 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 上篇文章讲的轮询分发 : 1个队列,无论多少个消费者,无论消费者处理消息的耗时长短,大家消费的数量都一样. 而公平分发,又叫 : 能者多劳,顾名思义,处理得越快,消费得越多. 生产者 public class Producer { private const string QueueName = " 阅读全文
posted @ 2020-12-15 20:44 星火撩原 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 上一篇讲了简单队列,实际工作中,这种队列应该很少用到,因为生产者发送消息的耗时一般都很短,但是消费者收到消息后,往往伴随着对高消息的业务逻辑处理,是个耗时的过程,这势必会导致大量的消息积压在一个消费者手中,从而导致业务的积压. 所以我们需要多个消费者一起消费队列中的消息,模型如下:(为了方便讲解,暂 阅读全文
posted @ 2020-12-15 20:42 星火撩原 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/vbirdbest/article/details/78583480 简单队列的模型: P : 生产者,即 Producer C : 消费者,即 Consumer "hello" : 消息 红色方块即队列 首先新建一个工具类,方便获取连接. publ 阅读全文
posted @ 2020-12-15 20:39 星火撩原 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 原文:https://blog.csdn.net/vbirdbest/article/details/78577043 一.简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链 阅读全文
posted @ 2020-12-15 20:37 星火撩原 阅读(91) 评论(0) 推荐(0) 编辑