consumer

更新时间:2023-01-02 17:56:00 阅读: 评论:0


2023年1月2日发(作者:2a学校)

RabbitMQ之Consumer消费模式(PushPull)

概述

消息中间件有很多种,进程也会拿⼏个来对⽐对⽐,其中⼀种对⽐项就是消费模式。消息的消费模式分Push、Pull两种,或者两者兼具。

RabbitMQ的消费模式就是兼具Push和Pull。

本⽂通过demo代码以及借助wireshark抓包⼯具来观察RabbitMQ的消费模式。

push模式

发送端向broker端发送数据,数据内容为:RabbitMQDemoTest,SendMessages0;RabbitMQDemoTest,SendMessages1;

RabbitMQDemoTest,SendMessages2,⼀次类推……

下⾯是消费端的⽰例代码:

Connectionconnection=nection();

Channelchannel=Channel();

QueueingConsumerconsumer=newQueueingConsumer(channel);

os(1);

onsume(QUEUE_NAME,fal,"consumer_zzh",consumer);

while(true){

rydelivery=livery();

Stringmessage=newString(y());

n("[X]Received'"+message+"'");

ck(elope().getDeliveryTag(),fal);

break;

}

();

();

运⾏输出:RabbitMQDemoTest,SendMessages0

通过wirkshark⼯具来查看上⾯⽰例代码的整个AMQP的过程(图1):

上图可以对照实例代码来看,⽐如图中:和-Ok就是⽰例代码中的:os(1);

再⽐如图中的就是⽰例代码中的ck(elope().getDeliveryTag(),fal);

对于上图中的带蓝⾊背影的那⾏(即No.545,展开如下图,brokertoclient)

可以看到Delivery-Tag=1,消息内容:“RabbitMQDemoTest,SendMessages0”。

展开No.546,即这⾏:

可以看到clienttobroker的Ack:delievery-tag=1,和上⾯的符合。

仔细的朋友可以看到No.548同样是broker向client发送了⼀条数据,通过展开数据可知:

其内包含的数据正好是下⼀条的消息——“RabbitMQDemoTest,SendMessages1”。但是在运⾏实例的时候是没有打印出来的,可

以看图1,是broker端主动向client端发送的数据,client端没有请求。在broker端发送第⼀条数据,即"RabbitMQDemoTest,Send

Messages0"之后发送Ack,之后关闭Channel,到真正关闭完channel之间,broker端还是会发送(push)数据给Client,此时Client不会在

Ack此条数据了。那么这样这条消息会不会丢失呢?答案是否定的,你可以再运⾏下consumer程序,就能消费到这条消息,rabbitmq对设

置autoAck=fal之后没有被Ack的消息是不会清除掉的。

实际上如果不设置os(1),那么broker端会⼀次推送多条数据

RabbitMQ的每⼀数据帧(Frame)都是以0xCE结尾。

pull模式

同样采⽤wirkshark⼯具来观察pull模式的AMQP过程,pull模式主要是通过channel,basicGet⽅法来获取消息,⽰例代码如下:

GetResponrespon=et(QUEUE_NAME,fal);

n(newString(y()));

ck(elope().getDeliveryTag(),fal);

wireshark抓包结果:

可以观察No.122,No.123,No.124,这些对于上⾯的⽰例代码。

⾸先是client端发送Get请求,然后broker响应请求回传消息,最后client端发送Ack.可以看到有别于push模式,broker端不会在client端

没有请求的情况下来回传消息。

欢迎⽀持笔者新作:《深⼊理解Kafka:核⼼设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱⼩厮的博

客。

本文发布于:2023-01-02 17:56:00,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/79105.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:天使之城歌词
下一篇:painting
标签:consumer
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图