我正在使用OpenTracing,正在尝试通过RabbitMQ传播跨度。但是我不明白应该如何注入跨度以及以后如何提取它。
这是用于发送消息的代码
def send_message(self, message, tracer):
root_span = tracer.get_span()
with opentracing.tracer.start_span('Sending message to broker', child_of=root_span) as span:
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='default')
json_message = json.dumps(message)
channel.basic_publish(exchange='',
routing_key='default',
body=json_message)
connection.close()`
我有一个用于接收消息的回调函数
def _callback(self, ch, method, properties, body):
print(" [x] Received %r" % body)
所以在某个地方,我想以某种方式注入跨度,然后将其提取。有谁知道或有任何示例如何做到这一点?
我曾尝试在这样的发送方中调用basic_publish之前注入
tracer.inject(span, Format.HTTP_HEADERS, headers)
但是我不知道哪些参数要使用inject方法。
然后我试图在回调中像这样提取它
span_ctx = tracer.extract(Format.HTTP_HEADERS, {})
同样,我不知道提取方法中要加入哪些参数。
编辑:解决了,有点
我通过将载体发送到属性头中解决了它。然后我可以从回调属性属性中提取跨度
在发件人中:
channel.basic_publish(exchange='',
routing_key='default',
properties=pika.BasicProperties(headers=carrier),
body=json_message)
在回调中,提取跨度:
def _callback(self, ch, method, properties, body):
span_ctx = tracer.extract(Format.TEXT_MAP, properties.headers)
答案 0 :(得分:0)
我通过将载体发送到属性头中解决了它。然后我可以从回调属性属性中提取跨度
在发件人中:
channel.basic_publish(exchange='',
routing_key='default',
properties=pika.BasicProperties(headers=carrier),
body=json_message)
在回调中,提取跨度:
def _callback(self, ch, method, properties, body):
span_ctx = tracer.extract(Format.TEXT_MAP, properties.headers)