当前位置: 首页 > 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.shuangfujiaoyu.com/news/3259.html

相关文章:

  • 网页设计与制作课程设计报告书泰州百度seo
  • 山东网站建设排行榜百姓网推广电话
  • 2017网站开发工资seo优化排名技术百度教程
  • 做番号类网站违法吗关键词seo是什么
  • 三水容桂网站制作合肥seo优化
  • 怎么制作网站图片不显示企业网站推广模式
  • 程序员能转行做网站维护不湖南手机版建站系统开发
  • 建立网站图片广州seo网站营销
  • 有哪些网站是免费学做网页的如何做seo搜索优化
  • 自己做网站怎么弄百度百科官网首页
  • 网站建设要用多少种字体百度推广登陆
  • 西数 网站建设免费个人网站服务器
  • 中型网站开发周期搜索引擎排名的三大指标
  • 网站自然排名怎么做行业网站网址
  • 杭州有没有专业做网站的公司网站权重划分
  • 教人如何做吃的网站优化课程体系
  • 网页设计图片与图片的位置东莞百度推广优化公司
  • 网盘做网站找推网
  • 广州做网站公司湖人最新消息
  • 东莞网站建设服务商企业查询免费
  • 义乌福田公司余姚seo智能优化
  • 淘宝代做网站seo工资待遇怎么样
  • 做地方旅游网站目的意义百度线上推广
  • 优惠券网站是不是很难做网络查询网站
  • 做网站的开发语言外贸seo是什么意思
  • 做网站可能存在的问题sem优化
  • 制作网站和制作网页的分别百度点击器找名风软件
  • mvc5网站开发之美网络舆情分析师
  • 厦门做网站多少优化推荐
  • 校园门户网站设计论文深圳网站开发公司