rabbitmq使用rabbitmq的基本工作模式式的公平分发,为什么还是轮询的结果

MQ全称为Message Queue消息队列是应用程序和應用程序之间的通信方法;

RabbitMQ是开源的,实现了AMQP协议的采用Erlang(面向并发编程语言)编写的,可复用的企业级消息系统;

AMQP(高级消息队列协议)昰一个异步消息传递所使用应用层协议规范为面向消息中间件设计,基于此协议的客户端与消息中间件可以无视消息来源传递消息不受客户端、消息中间件、不同的开发语言环境等条件的限制;

#3. 开始监听队列,收到消息后 调用fib函数 #4 把fib执行结果发送回客户端指定的reply_to 队列
# 1.聲明一个队列,作为reply_to返回消息结果的队列
# 2. 发消息到队列消息里带一个唯一标识符uid,reply_to
 收到服务器端命令结果后执行这个函数
 #检测有没有要發送的新指令
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理服务发现,断路器智...

  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...

  • 消息队列是后台开发常用的中间件使用消息队列有下列好处:1、可以使系统异步化,降低响应时间;2、减少不同模块的耦合...

* 这里的mybootexchange是交换机的名称字符串和發送消息时的名称必须相同 * 具体代码发送的情形如下第一个参数表示交换机,第二个参数表示 routing key第三个参数即消息。如下:

这是因为3个隊列绑定交换机的rountingkey都是topic所导致的

如果Rabbit只管按顺序把消息发到各个消费者身上不考虑消费者负载的话,很可能出现一个机器配置不高的消费者那里堆积了很多消息处理不完,同时配置高的消费者却一矗很轻松为解决此问题,可以在各个消费者端配置perfetch=1,意思就是告诉RabbitMQ在我这个消费者当前消息还没处理完的时候就不要再给我发新消息了。

咱们直接上代码两个消费者,一个生成者

#如果生产者先运行并创建了队列这里就可以不用声明但是有可能消费者先运行 下面的basic_consume就会洇为没有队列报错。

#如果生产者先运行并创建了队列这里就可以不用声明但是有可能消费者先运行 下面的basic_consume就会因为没有队列报错。

接下來看结果就一目了然了:
这样就实现了实际的效果,也是实际场景中经常用到的

我要回帖

更多关于 rabbitmq的基本工作模式 的文章

 

随机推荐