当前位置: 首页 > 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.yayakq.cn/news/470314/

相关文章:

  • 做网站 做什么网站好百度输入法
  • 网站开发要求自建的电子网站如何做推广
  • 网站建设动态静态wordpress 标签页
  • 专业的高密网站建设装修风格现代简约
  • 吉林专业做网站唐山哪里有做网站的
  • 网站开发与制作西安响应式网站建设
  • 合肥市建设工程造价信息网站网站制作报价被哪些因素影响
  • 网站优化基础安卓app开发语言
  • 佛山搭建建网站哪家好手工制作香囊
  • 企业标准网上备案网站网站开发的选择是什么
  • 做网站的职业主流的网站建设软件
  • 知名企业网站规划书浙江省建设工程造价信息网
  • 网站开发需要什么知识网站开发明细报价表
  • 用mediawiki做的网站北京网页设计新趋势
  • 网站可信认证wordpress上传之后
  • 知识付费问答系统网站开发中国兰州网首页
  • 如何写一份网站优化建设的方案在线定制头像免费
  • 网站开发g网站建设项目有哪些
  • 商务网站建设总结成都手工活外发加工网
  • 软件销售网站模板wordpress为什么加载速度很慢
  • 群晖nas可以做网站精准信息300099
  • 哪里有做区块链网站的滁州网站设计
  • 网站应该如何进行优化蓝鸟E4A做网站程序
  • 四川住房城乡建设厅网站首页北京朝阳区地图高清版大图
  • 莆田中小企业网站制作南京网站建设小程序开发 雷仁网络
  • 重庆需要网站建设从搜索引擎访问网站
  • react做的电商网站能上线吗果酱wordpress
  • 小米果怎么做视频网站扫二维码直接进网站怎么做
  • 北京网站建设有哪些公司好南昌网站建设讯息
  • 哪个公司做网站比较好注册公司上海