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

鹤壁做网站价格品牌型网站设计推荐

鹤壁做网站价格,品牌型网站设计推荐,河南省网站制作公司,网站建设公司电话本人理解,顺序消息如果不分消息组,那么会影响并行处理速度,所以尽量消息组分的散一些 首先上要求,官方文档如下: 总结: 1.必须同一个消息组,消息组和消费组不是一个概念,不要混 2.必…

本人理解,顺序消息如果不分消息组,那么会影响并行处理速度,所以尽量消息组分的散一些
首先上要求,官方文档如下:
在这里插入图片描述
总结:
1.必须同一个消息组,消息组和消费组不是一个概念,不要混
2.必须单一生产者,也就是说线上生产只能开一个 pod,感觉局限有点高,无法多 pod 接入
3.必须串行发送,这个点也不太好,限制过高
以上三点
在我的案例中(企业微信回调消息)
那么只能开一个接口服务Pod 来接收微信回调,如果挂了,那完蛋,开多个 pod的话,那只有把请求放队列,通过队列pop进行消费再生产消息到 mq,这样同时也解决了第三点的串行发送。

生产的时候如何确定是顺序消息,只需要生产消息的时候给设定一个消息组

msg := &rmq_client.Message{
Topic: Topic,Body:  []byte("this is a message : " + strconv.Itoa(i)),
}
// set keys and tag
msg.SetKeys("a", "b")
msg.SetTag("ab")
// 这里设置消息组
msg.SetMessageGroup("fifo")

分组分的越细越好

提高消费速度

当拿到消息后,根据消息分组来进行并发处理,每个分组内进行串行处理,关键代码如下


func (m *RocketMq) ConsumerOrderly(funcMap map[string]func([]byte) error) {var err errorm.consumerOnce.Do(func() {Log().Info("##############pro consume orderly start#############", m.MqConfig)errTmp := m.proSimConsumer.Start()if errTmp != nil {Log().Panic("MQ启动失败", errTmp)return}})defer m.proSimConsumer.GracefulStop()// 总体保证有N个在运行var ch = make(chan int, m.MaxGoroutine)for {fmt.Println("start receive message")mvs, errReceive := m.proSimConsumer.Receive(context.TODO(), 8, 20*time.Second)if errReceive != nil {if strings.Contains(errReceive.Error(), "no new message") {Log().Info(errReceive)} else {Log().Error("顺序消息,拉取MQ消息失败:", errReceive)}time.Sleep(time.Second * 2)continue}var msgGroupMap = make(map[string][]*rmq_client.MessageView, 0)for _, v := range mvs {if _, ok := funcMap[*v.GetTag()]; !ok {Log().Error(v.GetTag(), ": action do not exist")continue} else {// 根据msgGroup汇总msgGroup := v.GetMessageGroup()msgGroupMap[*msgGroup] = append(msgGroupMap[*msgGroup], v)}}// 最大程度多线程消费for _, item := range msgGroupMap {ch <- 1go func(item []*rmq_client.MessageView) {for _, v := range item {fmt.Println(*v.GetTag(), *v.GetMessageGroup(), string(v.GetBody()))action, _ := funcMap[*v.GetTag()]if errTmp := action(v.GetBody()); errTmp != nil {Log().Error("mq顺序消费失败", errTmp)break} else {m.proSimConsumer.Ack(context.TODO(), v)}}<-ch}(item)}}
}

最后需要注意的点:

同一个消费者 Group ID 下所有的 Consumer 实例必须保证订阅的 Topic 一致,并且也必须保证订阅 Topic 时设置的过滤规则(Tag)一致。否则您的消息可能会丢失
请保证订阅一致性
在这里插入图片描述

http://www.dinnco.com/news/42816.html

相关文章:

  • 网站标题关键词描述莱阳seo排名
  • 蜘蛛爬取网站口碑营销属于什么营销
  • 做聚会的网站一个关键词要刷多久
  • 万维网网站注册哈尔滨最新疫情通报
  • 临沧网站开发南昌seo排名公司
  • 微信商城小程序搭建教程网络优化公司哪家好
  • 信息服务类网站怎么做seo外链招聘
  • 做行业网站赚钱吗seo按照搜索引擎的什么对网站
  • 资阳seo公司广州百度推广排名优化
  • 搞笑视频网站建设策划书深圳营销推广引流公司
  • WordPress可以做社交网站嘛石家庄谷歌seo
  • 一个网站能卖多少钱?网站怎么收录
  • 网络推广及网站建设合作协议排名第一的手机清理软件
  • 佛山网站优化步骤网络营销公司如何建立
  • 导购分享网站模板seo什么意思简单来说
  • 网站优化意见百度热搜榜小说排名
  • 广西建设协会网站首页营销文案
  • 网站被攻击怎么让百度重新蜘蛛自动抓上海网站seo策划
  • 网站架构计划书百度官方推广平台
  • 做教育网站用什么颜色平台推广引流
  • 南阳专业网站排名推广基本seo
  • 上海网络推广外包广告seo是什么意思
  • 哈尔滨专业网站建设中国舆情在线
  • 遵义做网站的网络营销平台排名
  • 接外贸订单的平台泉州seo培训
  • 吴江市建设局网站网络平台运营是做什么的
  • 营销型网站建设sempk网站宣传文案范例
  • 代做ppt网站好重庆网站建设推广
  • 北京市门头沟有没有做网站的网络营销是什么工作
  • 怎么健手机网站淘宝seo搜索引擎原理