public string SendMessage() { try { // Start an activity with a name following the semantic convention of the OpenTelemetry messaging specification. // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#span-name var activityName = $"{RabbitMqHelper.TestQueueName} send"; using (var activity = ActivitySource.StartActivity(activityName, ActivityKind.Producer)) { var props = this.channel.CreateBasicProperties(); // Depending on Sampling (and whether a listener is registered or not), the // activity above may not be created. // If it is created, then propagate its context. // If it is not created, the propagate the Current context, // if any. ActivityContext contextToInject = default; if (activity != null) { this.logger.LogInformation("Injecting Context From RabbitMqHelper Activity"); contextToInject = activity.Context; } else if (Activity.Current != null) { this.logger.LogInformation("Injecting Context From Some Existing Activity"); contextToInject = Activity.Current.Context; } // Inject the ActivityContext into the message headers to propagate trace context to the receiving service. //Propagator.Inject(new PropagationContext(activity.Context, Baggage.Current), props, this.InjectTraceContextIntoBasicProperties); Propagator.Inject(new PropagationContext(contextToInject, Baggage.Current), props, this.InjectTraceContextIntoBasicProperties); /* ktully * The code below is a back-port to support nuget 0.4.0-beta2 * The above code is the way to do it for the currentrelease (0.5.0-beta2)!! */ //TextFormat.Inject(activity.Context, props, this.InjectTraceContextIntoBasicProperties); // The OpenTelemetry messaging specification defines a number of attributes. These attributes are added here. RabbitMqHelper.AddMessagingTags(activity); var body = $"Published message: DateTime.Now = {DateTime.Now}."; this.channel.BasicPublish( exchange: RabbitMqHelper.DefaultExchangeName, routingKey: RabbitMqHelper.TestQueueName, basicProperties: props, body: Encoding.UTF8.GetBytes(body)); this.logger.LogInformation($"Message sent: [{body}]"); return(body); } } catch (Exception ex) { this.logger.LogError(ex, "Message publishing failed."); throw; } }
public void StartConsumer() { this.logger.LogInformation("Waiting ANOTHER 5 seconds for RabbitMQ to boot..."); Thread.Sleep(5000); this.logger.LogInformation("5 seconds elapsed, calling StartConsumer!"); RabbitMqHelper.StartConsumer(this.channel, this.ReceiveMessage); }
public MessageReceiver(ILogger <MessageReceiver> logger) { this.logger = logger; this.logger.LogInformation("Waiting 20 seconds for RabbitMQ to boot..."); //Task.Delay(5000).Wait(); Thread.Sleep(20000); this.logger.LogInformation("20 seconds elapsed, initializing RabbitMqReceiver!"); this.connection = RabbitMqHelper.CreateConnection(); this.channel = RabbitMqHelper.CreateModelAndDeclareTestQueue(this.connection); }
public string SendMessage() { try { // Start an activity with a name following the semantic convention of the OpenTelemetry messaging specification. // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#span-name var activityName = $"{RabbitMqHelper.TestQueueName} send"; using (var activity = ActivitySource.StartActivity(activityName, ActivityKind.Producer)) { var props = this.channel.CreateBasicProperties(); if (activity != null) { // Inject the ActivityContext into the message headers to propagate trace context to the receiving service. Propagator.Inject(new PropagationContext(activity.Context, Baggage.Current), props, this.InjectTraceContextIntoBasicProperties); // The OpenTelemetry messaging specification defines a number of attributes. These attributes are added here. RabbitMqHelper.AddMessagingTags(activity); } var body = $"Published message: DateTime.Now = {DateTime.Now}."; this.channel.BasicPublish( exchange: RabbitMqHelper.DefaultExchangeName, routingKey: RabbitMqHelper.TestQueueName, basicProperties: props, body: Encoding.UTF8.GetBytes(body)); this.logger.LogInformation($"Message sent: [{body}]"); return(body); } } catch (Exception ex) { this.logger.LogError(ex, "Message publishing failed."); throw; } }
public MessageSender(ILogger <MessageSender> logger) { this.logger = logger; this.connection = RabbitMqHelper.CreateConnection(); this.channel = RabbitMqHelper.CreateModelAndDeclareTestQueue(this.connection); }
public void StartConsumer() { RabbitMqHelper.StartConsumer(this.channel, this.ReceiveMessage); }