问题

在sim环境中,生产的消息已发送至中间件服务,但是无消费者进行消费

而sim环境是有对应的节点的

DD trace染色

在DD中所有的请求及mq均通过trace染色&sidecar方式实现的,该方案可解决多服务并行测试的问题

即,存在一套基准环境sim13,当某个服务上sim时,拉取一个新的环境如sim110,针对该环境的请求及mq消息trace均会染色为s110xxxx,当该服务请求其它服务时,请求该服务的基准环境,同样会染色trace,而其它服务基准环境sidecar收到请求后会判断是否存在sim110环境,如果存在,则转发;如果不存在,则转发给sim13基准环境处理请求

mq消息大概原理同上

  • 生产段流量染色:在生产消息的时候统一通过设置消息的属性properties(map类型)值,来标记当前消息所属客户端环境
  • 消费端环境标示:mq proxy会根据消息的客户端标识,将消息保存至不同的队列,然后将对应队列的消息推送至对应的环境
    • 服务启动时,需要设置该服务是否为mq基准环境,如果是基准环境,则消息未找到对应的节点时,即会将消息推送至基准节点
    • 此处有严重的坑,运维为什么不能实现无节点自动推送至某个基准环境!!!!

当生产端发送消息时,通过消息服务端代理,将消息发送至不同的队列,如果存在对应的环境则发送至对应的队列,如果不存在,则发送至base队列

原因

该问题的原因即是有个服务启动时未配置该服务为基准环境,从此未收到mq消息的推送,导致无法消费

出现此类情况时,建议将所有节点都看下,是不是有消费消息

解决方案

在服务启动时,设置服务为基准环境;另外需要注意的是trace染色要一直携带下去,防止出现因多线程,或其它消息类型,request未使用sdk导致未传递trace的情况