当前位置: 首页 > wzjs >正文

温州如何进行网站推广泰兴网站制作

温州如何进行网站推广,泰兴网站制作,对于网站开发有什么要求,谷歌服务器1. 为什么要消息分发当 broker 拥有多个消费者时,就会将消息分发给不同的消费者,消费者之间的消息不会重复,RabbitMQ 默认的消息分发机制是轮询,但会无论消费者是否发送了 ack,broker 都会继续发送消息至消费者&#x…

1. 为什么要消息分发

当 broker 拥有多个消费者时,就会将消息分发给不同的消费者,消费者之间的消息不会重复,RabbitMQ 默认的消息分发机制是轮询,但会无论消费者是否发送了 ack,broker 都会继续发送消息至消费者,这就会造成消费者压力增大。于是,可以限制消费者每一次接收到的消息的数量,当消息达到该数量时,broker 就不会继续给这个消费者发送消息,而是会给其他的消费者派送消息。

所消费者消费了一条消息,并且给 broker 发送了 ack,那么此时消费者所未消耗的消息就没有达到最大消息数量,于是 broker 就会继续给消费者分配消息,直到消费者未消费的消息数量达到上限。

对于这种特性,有下面两个应用场景:

1.1 限流

在某些秒杀场景中,每一秒消费者接收到的消息都会非常大,那么就会造成消费者压力过大。于是我们就可以限制消费者所能接收的最大消息数量。

配置代码如下:

spring:rabbitmq:listener:simple:acknowledge-mode: manualprefetch: 5 #每个队列最多接收五条消息

在配置中,prefetch 表示队列中的消息数量上限为 5 条,若队列中未确认的消息数量达到 5 条,此时 broker 就不会继续给该队列分配消息,而是给其它的未达到上限的队列分配消息。

并且此处要设置为手动确认,若使用 auto 或 none,可能业务逻辑还没有开始消息就已经被签收,这就无法发挥限流的作用。

队列、交换机声明代码如下:

    @Bean("qosQueue")public Queue qosQueue() {return QueueBuilder.durable(Constants.QOS_QUEUE).build();}@Bean("qoeExchange")public DirectExchange qoeExchange() {return ExchangeBuilder.directExchange(Constants.QOS_EXCHANGE).build();}@Bean("qosBind")public Binding qosBind(@Qualifier("qoeExchange") DirectExchange directExchange,@Qualifier("qosQueue") Queue queue) {return BindingBuilder.bind(queue).to(directExchange).with(Constants.QOS_ROUTINGKEY);}

生产者代码如下:

    @RequestMapping("/qos")public String qos() {for (int i = 0; i < 20; i++) {String messageInfo = "qos... " + i;rabbitTemplate.convertAndSend(Constants.QOS_EXCHANGE, Constants.QOS_ROUTINGKEY, messageInfo);}return "消息发送成功";}

消费者代码如下:

@Component
@Slf4j
public class QosListener {@RabbitListener(queues = Constants.QOS_QUEUE)public void listener1(Message message, Channel channel) throws IOException {String messageInfo = new String(message.getBody());long deliveryTag = message.getMessageProperties().getDeliveryTag();log.info("接收到消息: {}, deliveryTag: {}", messageInfo, deliveryTag);}}

此处,消费者没有给 broker 发送 ack,那么队列中的消息就会一直存在。

代码运行结果如下:

这里我们可以看到,一共有 5 条未确认的消息, 已经达到了上限,于是就不会继续向消费者发送消息。

1.2 负载均衡

使用消息分发,也可以实现负载均衡。

现有两个消费者 A、B,A 处理消息的速度慢,B处理消息的速度快。若不设置负载均衡,那么就会出现 A 积压的消息过多,而 B 几乎没有什么消息挤压,这就没有充分地利用资源。

于是我们可以将 prefetch 设置为 1,那么每次消费者只会接收到一条消息,当 A、B 接收到消息后,在 B 处理完成时 A 还没有处理完,于是 broker 就会给 B 继续推送消息,直到 A 处理完成后才会继续给 A 推送消息。

消费者代码如下:

@Component
@Slf4j
public class QosListener {/*** 消费者1* @param message* @param channel* @throws IOException*/@RabbitListener(queues = Constants.QOS_QUEUE)public void listener1(Message message, Channel channel) throws IOException {String messageInfo = new String(message.getBody());long deliveryTag = message.getMessageProperties().getDeliveryTag();log.info("消费者 1 接收到消息: {}, deliveryTag: {}", messageInfo, deliveryTag);try {Thread.sleep(2000);channel.basicAck(deliveryTag, false);} catch (IOException e) {channel.basicNack(deliveryTag, false, true);} catch (InterruptedException e) {throw new RuntimeException(e);}}/*** 消费者2* @param message* @param channel* @throws IOException*/@RabbitListener(queues = Constants.QOS_QUEUE)public void listener2(Message message, Channel channel) throws IOException {String messageInfo = new String(message.getBody());long deliveryTag = message.getMessageProperties().getDeliveryTag();log.info("消费者 2 接收到消息: {}, deliveryTag: {}", messageInfo, deliveryTag);try {Thread.sleep(1000);channel.basicAck(deliveryTag, false);} catch (IOException e) {channel.basicNack(deliveryTag, false, true);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

上述代码,将消费者 2 的处理速度是消费者 1 的两倍,代码运行结果如下:

可以看出,消费者  2 每消耗 2 条数据,消费者 1 才消耗 1 条数据。,也就达到了负载均衡的作用。


文章转载自:

http://kslV9bpX.ywgrr.cn
http://HHBkOI4Q.ywgrr.cn
http://srorpiwn.ywgrr.cn
http://wxBbHEJb.ywgrr.cn
http://tEsnEkii.ywgrr.cn
http://rZhbos4n.ywgrr.cn
http://7GkgmylL.ywgrr.cn
http://qPJ6xrqA.ywgrr.cn
http://FBKkAIv2.ywgrr.cn
http://cpnpwVyQ.ywgrr.cn
http://0roa2JMi.ywgrr.cn
http://2kZBk7lu.ywgrr.cn
http://2LU4fvnT.ywgrr.cn
http://LXpIUcb2.ywgrr.cn
http://GDjUKdeH.ywgrr.cn
http://IOPXiBtZ.ywgrr.cn
http://R4aJxaus.ywgrr.cn
http://XWzugZsF.ywgrr.cn
http://v1M1oXDs.ywgrr.cn
http://VyMKzjL2.ywgrr.cn
http://75dBtOV9.ywgrr.cn
http://nxX0sZbL.ywgrr.cn
http://dhD3BeDG.ywgrr.cn
http://E9ADnNPi.ywgrr.cn
http://PxfXnXyI.ywgrr.cn
http://XLPjZyzP.ywgrr.cn
http://v8cgqk0r.ywgrr.cn
http://Y1BXw1da.ywgrr.cn
http://t6tjPWwx.ywgrr.cn
http://epURmKn3.ywgrr.cn
http://www.dtcms.com/wzjs/609033.html

相关文章:

  • 博山网站建设yx718wordpress手册下载
  • 上海近期新闻事件长春网络推广优化
  • 安徽省住房和城乡建设厅官网网站用手机制作表格的软件
  • 微网站搭建平台杭州做搜索引擎网站的公司
  • 有意义的网站wordpress显示用户角色
  • 如何更改网站备案号国家企业信用信息查询全国
  • 好资源源码网站怎么在百度上做公司网页
  • 有哪些做简历的网站贵州省建设执业资格促进会网站
  • win7 iis 新建网站wordpress服务器内部错误
  • 珠海网站建设小程序南昌网站推广排名
  • 网站建设的定位是什么意思哪儿能做邯郸网站建设
  • 古典网站建设欣赏泰安那家网好
  • 一个专做里番的网站肇庆企业推广
  • 中国网站开发语言学代码的网站
  • 佛山网站设计制作公司wordpress书签插件
  • 网站专题页制作深圳市工程交易服务网
  • 网站做支付端口的费用如何在工商局网站做企业年报
  • 中国建设银行官方网站登录入口连锁 加盟 网站模板
  • 视频背景音乐怎么做mp3下载网站泉州商城网站开发设计
  • 天河岗顶棠下上社网站建设设计seo排名赚能赚钱吗
  • 行业门户网站模板下载电子商务是电商吗
  • wordpress 全站sslwordpress怎么搜索代码
  • 海报设计素材网站免费写个网页多少钱
  • 金华网站建设黄页怎么用域名做网站
  • 网站备案 教程注册google账号
  • 小面网站建设dw个人网站制作
  • 品牌网站建站公司怎么给自己的网站设置关键词
  • 购买域名后怎么做网站网站域名解析错误怎么解决
  • 企业网站开发需求分析模板做网站应聘平台
  • 网站开发价格明细旅游网页设计页面 模板html