| 76 | } |
| 77 | |
| 78 | void send_request() { |
| 79 | proton::message req; |
| 80 | req.body(requests.front()); |
| 81 | req.reply_to(receiver.source().address()); |
| 82 | req.id(id_counter); |
| 83 | |
| 84 | opentelemetry::trace::StartSpanOptions options; |
| 85 | options.kind = opentelemetry::trace::SpanKind::kClient; |
| 86 | |
| 87 | // Start a span here before send |
| 88 | opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer = provider->GetTracer("qpid-tracer", OPENTELEMETRY_SDK_VERSION); |
| 89 | opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span = tracer->StartSpan("send_request", |
| 90 | {{"reply_to", req.reply_to()}, {"message", to_string(req.body())}}, |
| 91 | options); |
| 92 | opentelemetry::trace::Scope scope = tracer->WithActiveSpan(span); |
| 93 | |
| 94 | // Storing the 'scope' in a map to keep it alive and erasing it when a response is received. |
| 95 | scope_map[req.id()] = std::make_shared<opentelemetry::trace::Scope>(std::move(scope)); |
| 96 | id_counter++; |
| 97 | |
| 98 | sender.send(req); |
| 99 | } |
| 100 | |
| 101 | void on_receiver_open(proton::receiver &) override { |
| 102 | send_request(); |