├── .dockerignore
├── .gitignore
├── App1.WebApi
├── App1.WebApi.csproj
├── Controllers
│ ├── CallApiController.cs
│ └── PublishMessageController.cs
├── Dockerfile
├── Program.cs
├── Properties
│ └── launchSettings.json
├── appsettings.Development.json
└── appsettings.json
├── App2.RabbitConsumer.Console
├── App2.RabbitConsumer.Console.csproj
├── Dockerfile
├── Program.cs
├── Properties
│ └── launchSettings.json
├── appsettings.json
└── wait.sh
├── App3.WebApi
├── App3.WebApi.csproj
├── Dockerfile
├── Events
│ └── MessagePersistedEvent.cs
├── Program.cs
├── Properties
│ └── launchSettings.json
├── Repository
│ ├── IRabbitRepository.cs
│ ├── ISqlRepository.cs
│ ├── RabbitRepository.cs
│ └── SqlRepository.cs
├── appsettings.Development.json
└── appsettings.json
├── App4.RabbitConsumer.HostedService
├── App4.RabbitConsumer.HostedService.csproj
├── Dockerfile
├── Helpers
│ └── ActivityHelper.cs
├── Program.cs
├── Properties
│ └── launchSettings.json
├── Worker.cs
├── appsettings.Development.json
├── appsettings.json
└── wait.sh
├── OpenTelemetry.Tracing.Apps.sln
├── README.md
├── docker-compose.yml
└── docs
├── components-diagram.drawio
├── components-diagram.png
└── jaeger.png
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.classpath
2 | **/.dockerignore
3 | **/.env
4 | **/.git
5 | **/.gitignore
6 | **/.project
7 | **/.settings
8 | **/.toolstarget
9 | **/.vs
10 | **/.vscode
11 | **/*.*proj.user
12 | **/*.dbmdl
13 | **/*.jfm
14 | **/azds.yaml
15 | **/bin
16 | **/charts
17 | **/docker-compose*
18 | **/Dockerfile*
19 | **/node_modules
20 | **/npm-debug.log
21 | **/obj
22 | **/secrets.dev.yaml
23 | **/values.dev.yaml
24 | LICENSE
25 | README.md
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Aa][Rr][Mm]/
27 | [Aa][Rr][Mm]64/
28 | bld/
29 | [Bb]in/
30 | [Oo]bj/
31 | [Ll]og/
32 | [Ll]ogs/
33 |
34 | # Visual Studio 2015/2017 cache/options directory
35 | .vs/
36 | # Uncomment if you have tasks that create the project's static files in wwwroot
37 | #wwwroot/
38 |
39 | # Visual Studio 2017 auto generated files
40 | Generated\ Files/
41 |
42 | # MSTest test Results
43 | [Tt]est[Rr]esult*/
44 | [Bb]uild[Ll]og.*
45 |
46 | # NUnit
47 | *.VisualState.xml
48 | TestResult.xml
49 | nunit-*.xml
50 |
51 | # Build Results of an ATL Project
52 | [Dd]ebugPS/
53 | [Rr]eleasePS/
54 | dlldata.c
55 |
56 | # Benchmark Results
57 | BenchmarkDotNet.Artifacts/
58 |
59 | # .NET Core
60 | project.lock.json
61 | project.fragment.lock.json
62 | artifacts/
63 |
64 | # StyleCop
65 | StyleCopReport.xml
66 |
67 | # Files built by Visual Studio
68 | *_i.c
69 | *_p.c
70 | *_h.h
71 | *.ilk
72 | *.meta
73 | *.obj
74 | *.iobj
75 | *.pch
76 | *.pdb
77 | *.ipdb
78 | *.pgc
79 | *.pgd
80 | *.rsp
81 | *.sbr
82 | *.tlb
83 | *.tli
84 | *.tlh
85 | *.tmp
86 | *.tmp_proj
87 | *_wpftmp.csproj
88 | *.log
89 | *.vspscc
90 | *.vssscc
91 | .builds
92 | *.pidb
93 | *.svclog
94 | *.scc
95 |
96 | # Chutzpah Test files
97 | _Chutzpah*
98 |
99 | # Visual C++ cache files
100 | ipch/
101 | *.aps
102 | *.ncb
103 | *.opendb
104 | *.opensdf
105 | *.sdf
106 | *.cachefile
107 | *.VC.db
108 | *.VC.VC.opendb
109 |
110 | # Visual Studio profiler
111 | *.psess
112 | *.vsp
113 | *.vspx
114 | *.sap
115 |
116 | # Visual Studio Trace Files
117 | *.e2e
118 |
119 | # TFS 2012 Local Workspace
120 | $tf/
121 |
122 | # Guidance Automation Toolkit
123 | *.gpState
124 |
125 | # ReSharper is a .NET coding add-in
126 | _ReSharper*/
127 | *.[Rr]e[Ss]harper
128 | *.DotSettings.user
129 |
130 | # TeamCity is a build add-in
131 | _TeamCity*
132 |
133 | # DotCover is a Code Coverage Tool
134 | *.dotCover
135 |
136 | # AxoCover is a Code Coverage Tool
137 | .axoCover/*
138 | !.axoCover/settings.json
139 |
140 | # Visual Studio code coverage results
141 | *.coverage
142 | *.coveragexml
143 |
144 | # NCrunch
145 | _NCrunch_*
146 | .*crunch*.local.xml
147 | nCrunchTemp_*
148 |
149 | # MightyMoose
150 | *.mm.*
151 | AutoTest.Net/
152 |
153 | # Web workbench (sass)
154 | .sass-cache/
155 |
156 | # Installshield output folder
157 | [Ee]xpress/
158 |
159 | # DocProject is a documentation generator add-in
160 | DocProject/buildhelp/
161 | DocProject/Help/*.HxT
162 | DocProject/Help/*.HxC
163 | DocProject/Help/*.hhc
164 | DocProject/Help/*.hhk
165 | DocProject/Help/*.hhp
166 | DocProject/Help/Html2
167 | DocProject/Help/html
168 |
169 | # Click-Once directory
170 | publish/
171 |
172 | # Publish Web Output
173 | *.[Pp]ublish.xml
174 | *.azurePubxml
175 | # Note: Comment the next line if you want to checkin your web deploy settings,
176 | # but database connection strings (with potential passwords) will be unencrypted
177 | *.pubxml
178 | *.publishproj
179 |
180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
181 | # checkin your Azure Web App publish settings, but sensitive information contained
182 | # in these scripts will be unencrypted
183 | PublishScripts/
184 |
185 | # NuGet Packages
186 | *.nupkg
187 | # NuGet Symbol Packages
188 | *.snupkg
189 | # The packages folder can be ignored because of Package Restore
190 | **/[Pp]ackages/*
191 | # except build/, which is used as an MSBuild target.
192 | !**/[Pp]ackages/build/
193 | # Uncomment if necessary however generally it will be regenerated when needed
194 | #!**/[Pp]ackages/repositories.config
195 | # NuGet v3's project.json files produces more ignorable files
196 | *.nuget.props
197 | *.nuget.targets
198 |
199 | # Microsoft Azure Build Output
200 | csx/
201 | *.build.csdef
202 |
203 | # Microsoft Azure Emulator
204 | ecf/
205 | rcf/
206 |
207 | # Windows Store app package directories and files
208 | AppPackages/
209 | BundleArtifacts/
210 | Package.StoreAssociation.xml
211 | _pkginfo.txt
212 | *.appx
213 | *.appxbundle
214 | *.appxupload
215 |
216 | # Visual Studio cache files
217 | # files ending in .cache can be ignored
218 | *.[Cc]ache
219 | # but keep track of directories ending in .cache
220 | !?*.[Cc]ache/
221 |
222 | # Others
223 | ClientBin/
224 | ~$*
225 | *~
226 | *.dbmdl
227 | *.dbproj.schemaview
228 | *.jfm
229 | *.pfx
230 | *.publishsettings
231 | orleans.codegen.cs
232 |
233 | # Including strong name files can present a security risk
234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
235 | #*.snk
236 |
237 | # Since there are multiple workflows, uncomment next line to ignore bower_components
238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
239 | #bower_components/
240 |
241 | # RIA/Silverlight projects
242 | Generated_Code/
243 |
244 | # Backup & report files from converting an old project file
245 | # to a newer Visual Studio version. Backup files are not needed,
246 | # because we have git ;-)
247 | _UpgradeReport_Files/
248 | Backup*/
249 | UpgradeLog*.XML
250 | UpgradeLog*.htm
251 | ServiceFabricBackup/
252 | *.rptproj.bak
253 |
254 | # SQL Server files
255 | *.mdf
256 | *.ldf
257 | *.ndf
258 |
259 | # Business Intelligence projects
260 | *.rdl.data
261 | *.bim.layout
262 | *.bim_*.settings
263 | *.rptproj.rsuser
264 | *- [Bb]ackup.rdl
265 | *- [Bb]ackup ([0-9]).rdl
266 | *- [Bb]ackup ([0-9][0-9]).rdl
267 |
268 | # Microsoft Fakes
269 | FakesAssemblies/
270 |
271 | # GhostDoc plugin setting file
272 | *.GhostDoc.xml
273 |
274 | # Node.js Tools for Visual Studio
275 | .ntvs_analysis.dat
276 | node_modules/
277 |
278 | # Visual Studio 6 build log
279 | *.plg
280 |
281 | # Visual Studio 6 workspace options file
282 | *.opt
283 |
284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
285 | *.vbw
286 |
287 | # Visual Studio LightSwitch build output
288 | **/*.HTMLClient/GeneratedArtifacts
289 | **/*.DesktopClient/GeneratedArtifacts
290 | **/*.DesktopClient/ModelManifest.xml
291 | **/*.Server/GeneratedArtifacts
292 | **/*.Server/ModelManifest.xml
293 | _Pvt_Extensions
294 |
295 | # Paket dependency manager
296 | .paket/paket.exe
297 | paket-files/
298 |
299 | # FAKE - F# Make
300 | .fake/
301 |
302 | # CodeRush personal settings
303 | .cr/personal
304 |
305 | # Python Tools for Visual Studio (PTVS)
306 | __pycache__/
307 | *.pyc
308 |
309 | # Cake - Uncomment if you are using it
310 | # tools/**
311 | # !tools/packages.config
312 |
313 | # Tabs Studio
314 | *.tss
315 |
316 | # Telerik's JustMock configuration file
317 | *.jmconfig
318 |
319 | # BizTalk build output
320 | *.btp.cs
321 | *.btm.cs
322 | *.odx.cs
323 | *.xsd.cs
324 |
325 | # OpenCover UI analysis results
326 | OpenCover/
327 |
328 | # Azure Stream Analytics local run output
329 | ASALocalRun/
330 |
331 | # MSBuild Binary and Structured Log
332 | *.binlog
333 |
334 | # NVidia Nsight GPU debugger configuration file
335 | *.nvuser
336 |
337 | # MFractors (Xamarin productivity tool) working folder
338 | .mfractor/
339 |
340 | # Local History for Visual Studio
341 | .localhistory/
342 |
343 | # BeatPulse healthcheck temp database
344 | healthchecksdb
345 |
346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
347 | MigrationBackup/
348 |
349 | # Ionide (cross platform F# VS Code tools) working folder
350 | .ionide/
351 |
--------------------------------------------------------------------------------
/App1.WebApi/App1.WebApi.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net8.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/App1.WebApi/Controllers/CallApiController.cs:
--------------------------------------------------------------------------------
1 | using System.Net.Http;
2 | using System.Threading.Tasks;
3 | using Microsoft.AspNetCore.Mvc;
4 | using Microsoft.Extensions.Logging;
5 |
6 | namespace App1.WebApi.Controllers
7 | {
8 | [ApiController]
9 | [Route("http")]
10 | public class CallApiController(
11 | IHttpClientFactory httpClientFactory,
12 | ILogger logger)
13 | : ControllerBase
14 | {
15 | [HttpGet]
16 | public async Task Get()
17 | {
18 | logger.LogInformation("Calling App3");
19 |
20 | var client = httpClientFactory.CreateClient("app3");
21 |
22 | var response = await client.GetAsync("dummy");
23 |
24 | if (response.IsSuccessStatusCode)
25 | return Ok(await response.Content.ReadAsStringAsync());
26 |
27 | return StatusCode(500);
28 |
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/App1.WebApi/Controllers/PublishMessageController.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Text;
5 | using Microsoft.AspNetCore.Mvc;
6 | using Microsoft.Extensions.Configuration;
7 | using Microsoft.Extensions.Logging;
8 | using OpenTelemetry;
9 | using OpenTelemetry.Context.Propagation;
10 | using RabbitMQ.Client;
11 |
12 | namespace App1.WebApi.Controllers
13 | {
14 | [ApiController]
15 | [Route("publish-message")]
16 | public class PublishMessageController(
17 | ILogger logger,
18 | IConfiguration configuration)
19 | : ControllerBase
20 | {
21 | private static readonly ActivitySource Activity = new(nameof(PublishMessageController));
22 | private static readonly TextMapPropagator Propagator = Propagators.DefaultTextMapPropagator;
23 |
24 | [HttpGet]
25 | public void Get()
26 | {
27 | try
28 | {
29 | using (var activity = Activity.StartActivity("RabbitMq Publish", ActivityKind.Producer))
30 | {
31 | var factory = new ConnectionFactory { HostName = configuration["RabbitMq:Host"] };
32 | using (var connection = factory.CreateConnection())
33 | using (var channel = connection.CreateModel())
34 | {
35 | var props = channel.CreateBasicProperties();
36 |
37 | AddActivityToHeader(activity, props);
38 |
39 | channel.QueueDeclare(queue: "sample",
40 | durable: false,
41 | exclusive: false,
42 | autoDelete: false,
43 | arguments: null);
44 |
45 | var body = Encoding.UTF8.GetBytes("I am app1");
46 |
47 | logger.LogInformation("Publishing message to queue");
48 |
49 | channel.BasicPublish(exchange: "",
50 | routingKey: "sample",
51 | basicProperties: props,
52 | body: body);
53 | }
54 | }
55 | }
56 | catch (Exception e)
57 | {
58 | logger.LogError(e, "Error trying to publish a message");
59 | throw;
60 | }
61 | }
62 |
63 | private void AddActivityToHeader(Activity activity, IBasicProperties props)
64 | {
65 | Propagator.Inject(new PropagationContext(activity.Context, Baggage.Current), props, InjectContextIntoHeader);
66 | activity?.SetTag("messaging.system", "rabbitmq");
67 | activity?.SetTag("messaging.destination_kind", "queue");
68 | activity?.SetTag("messaging.rabbitmq.queue", "sample");
69 | }
70 |
71 | private void InjectContextIntoHeader(IBasicProperties props, string key, string value)
72 | {
73 | try
74 | {
75 | props.Headers ??= new Dictionary();
76 | props.Headers[key] = value;
77 | }
78 | catch (Exception ex)
79 | {
80 | logger.LogError(ex, "Failed to inject trace context.");
81 | }
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/App1.WebApi/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build-env
2 | WORKDIR /app
3 |
4 | # Set intermediate stage as build
5 | LABEL stage=app-build
6 |
7 | # Copy csproj and restore dependencies
8 | COPY App1.WebApi.csproj ./src/
9 | RUN dotnet restore "./src/App1.WebApi.csproj"
10 |
11 | # Copy everything, build and publish
12 | COPY . ./src/
13 | RUN dotnet publish src/*.csproj -c Release -o /app/publish
14 |
15 |
16 | # Build runtime imagedock
17 | FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim
18 | WORKDIR /app
19 | COPY --from=build-env /app/publish .
20 | ENTRYPOINT ["dotnet", "App1.WebApi.dll"]
--------------------------------------------------------------------------------
/App1.WebApi/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using App1.WebApi.Controllers;
3 | using Microsoft.AspNetCore.Builder;
4 | using Microsoft.Extensions.DependencyInjection;
5 | using OpenTelemetry.Resources;
6 | using OpenTelemetry.Trace;
7 |
8 | namespace App1.WebApi
9 | {
10 | public class Program
11 | {
12 | public static void Main(string[] args)
13 | {
14 | var builder = WebApplication.CreateBuilder(args);
15 |
16 | builder.Services.AddControllers();
17 | builder.Services.AddHttpClient();
18 | builder.Services.AddOpenTelemetry().WithTracing(b =>
19 | {
20 | b.AddAspNetCoreInstrumentation()
21 | .AddHttpClientInstrumentation()
22 | .AddSource(nameof(PublishMessageController))
23 | .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("App1"))
24 | .AddOtlpExporter(opts =>
25 | {
26 | opts.Endpoint =
27 | new Uri(
28 | $"{builder.Configuration["Jaeger:Protocol"]}://{builder.Configuration["Jaeger:Host"]}:{builder.Configuration["Jaeger:Port"]}");
29 | });
30 | });
31 |
32 | builder.Services.AddHttpClient("app3", c =>
33 | {
34 | c.BaseAddress = new Uri(builder.Configuration["App3Endpoint"]!);
35 | c.Timeout = TimeSpan.FromSeconds(15);
36 | c.DefaultRequestHeaders.Add(
37 | "accept", "application/json");
38 | });
39 |
40 | var app = builder.Build();
41 | app.MapControllers();
42 | app.Run();
43 | }
44 | }
45 | }
--------------------------------------------------------------------------------
/App1.WebApi/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/launchsettings.json",
3 | "profiles": {
4 | "App1.WebApi": {
5 | "commandName": "Project",
6 | "launchBrowser": true,
7 | "launchUrl": "health",
8 | "environmentVariables": {
9 | "ASPNETCORE_ENVIRONMENT": "Development"
10 | },
11 | "applicationUrl": "http://localhost:5000"
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/App1.WebApi/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/App1.WebApi/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*",
10 | "Jaeger": {
11 | "Protocol": "http",
12 | "Host": "localhost",
13 | "Port": 4317
14 | },
15 | "RabbitMq": {
16 | "Host": "localhost"
17 | },
18 | "App3Endpoint": "http://localhost:5001"
19 | }
20 |
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/App2.RabbitConsumer.Console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net8.0
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | Always
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build-env
2 | WORKDIR /app
3 |
4 | # Set intermediate stage as build
5 | LABEL stage=app-build
6 |
7 | # Copy csproj and restore dependencies
8 | COPY App2.RabbitConsumer.Console.csproj ./src/
9 | RUN dotnet restore "./src/App2.RabbitConsumer.Console.csproj"
10 |
11 | # Copy everything, build and publish
12 | COPY . ./src/
13 | RUN dotnet publish src/*.csproj -c Release -o /app/publish
14 |
15 |
16 | # Build runtime imagedock
17 | FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim
18 | WORKDIR /app
19 | COPY --from=build-env /app/publish .
20 | COPY wait.sh .
21 | RUN chmod +x wait.sh
22 | ENTRYPOINT ["dotnet", "App2.RabbitConsumer.Console.dll"]
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.IO;
5 | using System.Linq;
6 | using System.Net.Http;
7 | using System.Text;
8 | using System.Text.Json;
9 | using System.Threading.Tasks;
10 | using Microsoft.Extensions.Configuration;
11 | using Microsoft.Extensions.Logging;
12 | using OpenTelemetry;
13 | using OpenTelemetry.Context.Propagation;
14 | using OpenTelemetry.Resources;
15 | using OpenTelemetry.Trace;
16 | using RabbitMQ.Client;
17 | using RabbitMQ.Client.Events;
18 |
19 | namespace App2.RabbitConsumer.Console
20 | {
21 | public class Program
22 | {
23 | private static readonly ActivitySource Activity = new(nameof(Program));
24 | private static readonly TraceContextPropagator Propagator = new();
25 |
26 | private static IConfiguration _configuration;
27 | private static ILogger _logger;
28 |
29 | public static void Main()
30 | {
31 | try
32 | {
33 |
34 | SetupConfiguration();
35 | SetupLogger();
36 | using var openTelemetry = SetupOpenTelemetry();
37 | DoWork();
38 |
39 | System.Console.WriteLine(" Press [enter] to exit.");
40 | System.Console.ReadLine();
41 |
42 | }
43 | catch (Exception e)
44 | {
45 | System.Console.WriteLine(e);
46 | throw;
47 | }
48 |
49 | }
50 |
51 | public static void DoWork()
52 | {
53 | var factory = new ConnectionFactory() { HostName = _configuration["RabbitMq:Host"], DispatchConsumersAsync = true };
54 |
55 | var rabbitMqConnection = factory.CreateConnection();
56 | var rabbitMqChannel = rabbitMqConnection.CreateModel();
57 | var httpClient = new HttpClient { BaseAddress = new Uri(_configuration["App3UriEndpoint"]) };
58 |
59 | rabbitMqChannel.QueueDeclare(queue: "sample",
60 | durable: false,
61 | exclusive: false,
62 | autoDelete: false,
63 | arguments: null);
64 |
65 | rabbitMqChannel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
66 |
67 | var consumer = new AsyncEventingBasicConsumer(rabbitMqChannel);
68 | consumer.Received += async (model, ea) =>
69 | {
70 | await ProcessMessage(ea,
71 | httpClient,
72 | rabbitMqChannel);
73 | };
74 |
75 | rabbitMqChannel.BasicConsume(queue: "sample",
76 | autoAck: false,
77 | consumer: consumer);
78 |
79 | }
80 |
81 | private static async Task ProcessMessage(BasicDeliverEventArgs ea,
82 | HttpClient httpClient,
83 | IModel rabbitMqChannel)
84 | {
85 | try
86 | {
87 | var parentContext = Propagator.Extract(default, ea.BasicProperties, ExtractTraceContextFromBasicProperties);
88 | Baggage.Current = parentContext.Baggage;
89 |
90 | using (var activity = Activity.StartActivity("Process Message", ActivityKind.Consumer, parentContext.ActivityContext))
91 | {
92 |
93 | var body = ea.Body.ToArray();
94 | var message = Encoding.UTF8.GetString(body);
95 | AddActivityTags(activity);
96 |
97 | _logger.LogInformation("Message Received: " + message);
98 |
99 | _ = await httpClient.PostAsync("/sql-to-event",
100 | new StringContent(JsonSerializer.Serialize(message),
101 | Encoding.UTF8,
102 | "application/json"));
103 |
104 | rabbitMqChannel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
105 | }
106 |
107 | }
108 | catch (Exception ex)
109 | {
110 | _logger.LogError(ex, "There was an error processing the message");
111 | }
112 | }
113 |
114 |
115 | private static IEnumerable ExtractTraceContextFromBasicProperties(IBasicProperties props, string key)
116 | {
117 | try
118 | {
119 | if (props.Headers.TryGetValue(key, out var value))
120 | {
121 | var bytes = value as byte[];
122 | return new[] { Encoding.UTF8.GetString(bytes) };
123 | }
124 | }
125 | catch (Exception ex)
126 | {
127 | _logger.LogError(ex, "Failed to extract trace context");
128 | }
129 |
130 | return Enumerable.Empty();
131 | }
132 |
133 | private static void AddActivityTags(Activity activity)
134 | {
135 | activity?.SetTag("messaging.system", "rabbitmq");
136 | activity?.SetTag("messaging.destination_kind", "queue");
137 | activity?.SetTag("messaging.rabbitmq.queue", "sample");
138 | }
139 |
140 |
141 | private static void SetupConfiguration()
142 | {
143 |
144 | //setup config
145 | var configFiles = Directory
146 | .GetFiles(Path.Combine(Directory.GetCurrentDirectory()),
147 | "appsettings.json").ToList();
148 |
149 | if (!configFiles.Any())
150 | throw new Exception("Cannot read config file");
151 |
152 | _configuration = new ConfigurationBuilder()
153 | .SetBasePath(Directory.GetCurrentDirectory())
154 | .AddJsonFile(configFiles[0], true, false)
155 | .AddEnvironmentVariables()
156 | .Build();
157 | }
158 |
159 | private static void SetupLogger()
160 | {
161 | using var loggerFactory = LoggerFactory.Create(builder =>
162 | {
163 | builder
164 | .AddFilter("Microsoft", LogLevel.Warning)
165 | .AddFilter("System", LogLevel.Warning)
166 | .AddFilter("LoggingConsoleApp.Program", LogLevel.Debug)
167 | .AddConsole();
168 | });
169 |
170 | _logger = loggerFactory.CreateLogger();
171 | }
172 |
173 | private static TracerProvider SetupOpenTelemetry()
174 | {
175 | return Sdk.CreateTracerProviderBuilder()
176 | .AddHttpClientInstrumentation()
177 | .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("App2"))
178 | .AddSource(nameof(Program))
179 | .AddOtlpExporter(opts =>
180 | {
181 | opts.Endpoint =
182 | new Uri(
183 | $"{_configuration["Jaeger:Protocol"]}://{_configuration["Jaeger:Host"]}:{_configuration["Jaeger:Port"]}");
184 | })
185 | .Build();
186 | }
187 |
188 | }
189 | }
190 |
191 |
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "App2.RabbitConsumer.Console": {
4 | "commandName": "Project"
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Jaeger": {
3 | "Protocol": "http",
4 | "Host": "localhost",
5 | "Port": 4317
6 | },
7 | "RabbitMq": {
8 | "Host": "localhost"
9 | },
10 | "App3UriEndpoint": "http://localhost:5001"
11 | }
--------------------------------------------------------------------------------
/App2.RabbitConsumer.Console/wait.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | time="$1"
4 | shift
5 | cmd="$@"
6 |
7 | >&2 echo "Sleeping $time seconds"
8 | sleep $time
9 | >&2 echo "Wait is over"
10 | exec $cmd
--------------------------------------------------------------------------------
/App3.WebApi/App3.WebApi.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net8.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/App3.WebApi/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build-env
2 | WORKDIR /app
3 |
4 | # Set intermediate stage as build
5 | LABEL stage=app-build
6 |
7 | # Copy csproj and restore dependencies
8 | COPY App3.WebApi.csproj ./src/
9 | RUN dotnet restore "./src/App3.WebApi.csproj"
10 |
11 | # Copy everything, build and publish
12 | COPY . ./src/
13 | RUN dotnet publish src/*.csproj -c Release -o /app/publish
14 |
15 |
16 | # Build runtime imagedock
17 | FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim
18 | WORKDIR /app
19 | COPY --from=build-env /app/publish .
20 | ENTRYPOINT ["dotnet", "App3.WebApi.dll"]
--------------------------------------------------------------------------------
/App3.WebApi/Events/MessagePersistedEvent.cs:
--------------------------------------------------------------------------------
1 | namespace App3.WebApi.Events
2 | {
3 | public class MessagePersistedEvent : IEvent
4 | {
5 | public string Message { get; set; }
6 | }
7 |
8 | public interface IEvent
9 | {
10 |
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/App3.WebApi/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using App3.WebApi.Repository;
3 | using Microsoft.AspNetCore.Builder;
4 | using Microsoft.Extensions.DependencyInjection;
5 | using OpenTelemetry.Resources;
6 | using OpenTelemetry.Trace;
7 | using System.Diagnostics;
8 | using System.Text.Json;
9 | using Microsoft.Extensions.Logging;
10 | using App3.WebApi.Events;
11 | using Microsoft.AspNetCore.Mvc;
12 |
13 | namespace App3.WebApi
14 | {
15 | public class Program
16 | {
17 | public static void Main(string[] args)
18 | {
19 | var builder = WebApplication.CreateBuilder(args);
20 |
21 | builder.Services.AddTransient();
22 | builder.Services.AddTransient();
23 |
24 | builder.Services.AddControllers().AddNewtonsoftJson();
25 | builder.Services.AddOpenTelemetry().WithTracing(b =>
26 | {
27 | b.AddAspNetCoreInstrumentation()
28 | .AddSource(nameof(RabbitRepository))
29 | .AddSqlClientInstrumentation()
30 | .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("App3"))
31 | .AddOtlpExporter(opts =>
32 | {
33 | opts.Endpoint =
34 | new Uri(
35 | $"{builder.Configuration["Jaeger:Protocol"]}://{builder.Configuration["Jaeger:Host"]}:{builder.Configuration["Jaeger:Port"]}");
36 | });
37 | });
38 |
39 | var app = builder.Build();
40 |
41 | app.MapGet("/dummy", (ILogger logger) =>
42 | {
43 | logger.LogInformation($"Logging current activity: {JsonSerializer.Serialize(Activity.Current)}");
44 | return "Ok";
45 | });
46 |
47 | app.MapPost("/sql-to-event", async ([FromBody] string message,
48 | ISqlRepository repository,
49 | IRabbitRepository eventPublisher,
50 | ILogger logger) =>
51 | {
52 | logger.LogTrace("You call sql save message endpoint");
53 | if (!string.IsNullOrEmpty(message))
54 | {
55 | await repository.Persist(message);
56 | eventPublisher.Publish(new MessagePersistedEvent { Message = message });
57 | }
58 | });
59 |
60 | app.Run();
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/App3.WebApi/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/launchsettings.json",
3 | "profiles": {
4 | "App3.WebApi": {
5 | "commandName": "Project",
6 | "launchBrowser": true,
7 | "launchUrl": "health",
8 | "environmentVariables": {
9 | "ASPNETCORE_ENVIRONMENT": "Development"
10 | },
11 | "applicationUrl": "http://localhost:5001"
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/App3.WebApi/Repository/IRabbitRepository.cs:
--------------------------------------------------------------------------------
1 | using App3.WebApi.Events;
2 |
3 | namespace App3.WebApi.Repository
4 | {
5 | public interface IRabbitRepository
6 | {
7 | void Publish(IEvent evt);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/App3.WebApi/Repository/ISqlRepository.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 |
3 | namespace App3.WebApi.Repository
4 | {
5 | public interface ISqlRepository
6 | {
7 | Task Persist(string message);
8 | }
9 | }
--------------------------------------------------------------------------------
/App3.WebApi/Repository/RabbitRepository.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Text;
5 | using App3.WebApi.Events;
6 | using Microsoft.Extensions.Configuration;
7 | using Microsoft.Extensions.Logging;
8 | using Newtonsoft.Json;
9 | using OpenTelemetry;
10 | using OpenTelemetry.Context.Propagation;
11 | using RabbitMQ.Client;
12 |
13 | namespace App3.WebApi.Repository
14 | {
15 | public class RabbitRepository(
16 | ILogger logger,
17 | IConfiguration configuration)
18 | : IRabbitRepository
19 | {
20 | private static readonly ActivitySource Activity = new(nameof(RabbitRepository));
21 | private static readonly TextMapPropagator Propagator = Propagators.DefaultTextMapPropagator;
22 |
23 | public void Publish(IEvent evt)
24 | {
25 | try
26 | {
27 | using (var activity = Activity.StartActivity("RabbitMq Publish", ActivityKind.Producer))
28 | {
29 | var factory = new ConnectionFactory { HostName = configuration["RabbitMq:Host"] };
30 | using (var connection = factory.CreateConnection())
31 | using (var channel = connection.CreateModel())
32 | {
33 | var props = channel.CreateBasicProperties();
34 |
35 | AddActivityToHeader(activity, props);
36 |
37 | channel.QueueDeclare(queue: "sample_2",
38 | durable: false,
39 | exclusive: false,
40 | autoDelete: false,
41 | arguments: null);
42 |
43 | var body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(evt));
44 | logger.LogInformation("Publishing message to queue");
45 |
46 | channel.BasicPublish(exchange: "",
47 | routingKey: "sample_2",
48 | basicProperties: props,
49 | body: body);
50 | }
51 | }
52 | }
53 | catch (Exception e)
54 | {
55 | logger.LogError(e, "Error trying to publish a message");
56 | throw;
57 | }
58 |
59 | }
60 |
61 | private void AddActivityToHeader(Activity activity, IBasicProperties props)
62 | {
63 | Propagator.Inject(new PropagationContext(activity.Context, Baggage.Current), props, InjectContextIntoHeader);
64 | activity?.SetTag("messaging.system", "rabbitmq");
65 | activity?.SetTag("messaging.destination_kind", "queue");
66 | activity?.SetTag("messaging.rabbitmq.queue", "sample_2");
67 | }
68 |
69 | private void InjectContextIntoHeader(IBasicProperties props, string key, string value)
70 | {
71 | try
72 | {
73 | props.Headers ??= new Dictionary();
74 | props.Headers[key] = value;
75 | }
76 | catch (Exception ex)
77 | {
78 | logger.LogError(ex, "Failed to inject trace context.");
79 | }
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/App3.WebApi/Repository/SqlRepository.cs:
--------------------------------------------------------------------------------
1 | using System.Data.SqlClient;
2 | using System.Threading.Tasks;
3 | using Microsoft.Extensions.Configuration;
4 |
5 | namespace App3.WebApi.Repository
6 | {
7 | public class SqlRepository(IConfiguration configuration) : ISqlRepository
8 | {
9 | private const string Query = "SELECT GETDATE()";
10 |
11 | public async Task Persist(string message)
12 | {
13 | await using var conn = new SqlConnection(configuration["SqlDbConnString"]);
14 | await conn.OpenAsync();
15 |
16 | //Do something more complex
17 | await using var cmd = new SqlCommand(Query, conn);
18 | var res = await cmd.ExecuteScalarAsync();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/App3.WebApi/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/App3.WebApi/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*",
10 | "Jaeger": {
11 | "Protocol": "http",
12 | "Host": "localhost",
13 | "Port": 4317
14 | },
15 | "RabbitMq": {
16 | "Host": "localhost"
17 | },
18 | "SqlDbConnString": "server=localhost;user id=sa;password=Pass@Word1;"
19 | }
20 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/App4.RabbitConsumer.HostedService.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net8.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-bookworm-slim AS build-env
2 | WORKDIR /app
3 |
4 | # Set intermediate stage as build
5 | LABEL stage=app-build
6 |
7 | # Copy csproj and restore dependencies
8 | COPY App4.RabbitConsumer.HostedService.csproj ./src/
9 | RUN dotnet restore "./src/App4.RabbitConsumer.HostedService.csproj"
10 |
11 | # Copy everything, build and publish
12 | COPY . ./src/
13 | RUN dotnet publish src/*.csproj -c Release -o /app/publish
14 |
15 |
16 | # Build runtime imagedock
17 | FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim
18 | WORKDIR /app
19 | COPY --from=build-env /app/publish .
20 | COPY wait.sh .
21 | RUN chmod +x wait.sh
22 | ENTRYPOINT ["dotnet", "App4.RabbitConsumer.HostedService.dll"]
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/Helpers/ActivityHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Text;
6 | using RabbitMQ.Client;
7 |
8 | namespace App4.RabbitConsumer.HostedService.Helpers
9 | {
10 | public static class ActivityHelper
11 | {
12 | public static IEnumerable ExtractTraceContextFromBasicProperties(IBasicProperties props, string key)
13 | {
14 | try
15 | {
16 | if (props.Headers.TryGetValue(key, out var value))
17 | {
18 | var bytes = value as byte[];
19 | return new[] { Encoding.UTF8.GetString(bytes ?? Array.Empty()) };
20 | }
21 | }
22 | catch (Exception ex)
23 | {
24 | System.Console.WriteLine($"Failed to extract trace context: {ex}");
25 | }
26 |
27 | return Enumerable.Empty();
28 | }
29 |
30 | public static void AddActivityTags(Activity activity)
31 | {
32 | activity?.SetTag("messaging.system", "rabbitmq");
33 | activity?.SetTag("messaging.destination_kind", "queue");
34 | activity?.SetTag("messaging.rabbitmq.queue", "sample_2");
35 | }
36 |
37 | }
38 | }
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Reflection;
3 | using Microsoft.Extensions.Caching.Distributed;
4 | using Microsoft.Extensions.Caching.StackExchangeRedis;
5 | using Microsoft.Extensions.DependencyInjection;
6 | using Microsoft.Extensions.DependencyInjection.Extensions;
7 | using Microsoft.Extensions.Hosting;
8 | using OpenTelemetry.Resources;
9 | using OpenTelemetry.Trace;
10 | using ZiggyCreatures.Caching.Fusion;
11 | using ZiggyCreatures.Caching.Fusion.Backplane.StackExchangeRedis;
12 | using ZiggyCreatures.Caching.Fusion.Serialization.SystemTextJson;
13 |
14 |
15 | namespace App4.RabbitConsumer.HostedService
16 | {
17 | public class Program
18 | {
19 | public static void Main(string[] args)
20 | {
21 | var builder = Host.CreateApplicationBuilder(args);
22 |
23 | builder.Services.AddHostedService();
24 |
25 | builder.Services.AddFusionCache()
26 | .WithSerializer(new FusionCacheSystemTextJsonSerializer())
27 | .WithBackplane(
28 | new RedisBackplane(new RedisBackplaneOptions { Configuration = $"{builder.Configuration["Redis:Host"]}:{builder.Configuration["Redis:Port"]}" })
29 | );
30 |
31 | builder.Services.AddOpenTelemetry().WithTracing(b =>
32 | {
33 | b.AddAspNetCoreInstrumentation()
34 | .AddHttpClientInstrumentation()
35 | .AddFusionCacheInstrumentation()
36 | .AddSource(nameof(Worker))
37 | .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("App4"))
38 | .AddOtlpExporter(opts =>
39 | {
40 | opts.Endpoint =
41 | new Uri(
42 | $"{builder.Configuration["Jaeger:Protocol"]}://{builder.Configuration["Jaeger:Host"]}:{builder.Configuration["Jaeger:Port"]}");
43 | });
44 | });
45 |
46 | var host = builder.Build();
47 | host.Run();
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "App4.RabbitConsumer.HostedService": {
4 | "commandName": "Project",
5 | "environmentVariables": {
6 | "DOTNET_ENVIRONMENT": "Development"
7 | },
8 | "dotnetRunMessages": "true"
9 | }
10 | }
11 | }
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/Worker.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.Hosting;
2 | using Microsoft.Extensions.Logging;
3 | using System;
4 | using System.Diagnostics;
5 | using System.Text;
6 | using System.Threading;
7 | using System.Threading.Tasks;
8 | using App4.RabbitConsumer.HostedService.Helpers;
9 | using Microsoft.Extensions.Caching.Distributed;
10 | using Microsoft.Extensions.Configuration;
11 | using OpenTelemetry;
12 | using OpenTelemetry.Context.Propagation;
13 | using RabbitMQ.Client;
14 | using RabbitMQ.Client.Events;
15 | using ZiggyCreatures.Caching.Fusion;
16 |
17 | namespace App4.RabbitConsumer.HostedService
18 | {
19 | public class Worker(
20 | ILogger logger,
21 | IFusionCache cache,
22 | IConfiguration configuration)
23 | : BackgroundService
24 | {
25 | private static readonly ActivitySource Activity = new(nameof(Worker));
26 | private static readonly TraceContextPropagator Propagator = new ();
27 |
28 | protected override Task ExecuteAsync(CancellationToken stoppingToken)
29 | {
30 | stoppingToken.ThrowIfCancellationRequested();
31 | logger.LogInformation("Worker started at: {time}", DateTimeOffset.Now);
32 | StartRabbitConsumer();
33 | return Task.CompletedTask;
34 | }
35 |
36 | private void StartRabbitConsumer()
37 | {
38 | var factory = new ConnectionFactory() {HostName = configuration["RabbitMq:Host"], DispatchConsumersAsync = true};
39 | var rabbitMqConnection = factory.CreateConnection();
40 | var rabbitMqChannel = rabbitMqConnection.CreateModel();
41 |
42 | rabbitMqChannel.QueueDeclare(queue: "sample_2",
43 | durable: false,
44 | exclusive: false,
45 | autoDelete: false,
46 | arguments: null);
47 |
48 | rabbitMqChannel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
49 |
50 | var consumer = new AsyncEventingBasicConsumer(rabbitMqChannel);
51 | consumer.Received += async (model, ea) => await ProcessMessage(ea);
52 |
53 |
54 | rabbitMqChannel.BasicConsume(queue: "sample_2",
55 | autoAck: true,
56 | consumer: consumer);
57 | }
58 |
59 | private async Task ProcessMessage(BasicDeliverEventArgs ea)
60 | {
61 | try
62 | {
63 | var parentContext = Propagator.Extract(default,
64 | ea.BasicProperties,
65 | ActivityHelper.ExtractTraceContextFromBasicProperties);
66 |
67 | Baggage.Current = parentContext.Baggage;
68 |
69 | using (var activity = Activity.StartActivity("Process Message", ActivityKind.Consumer, parentContext.ActivityContext))
70 | {
71 | var body = ea.Body.ToArray();
72 | var message = Encoding.UTF8.GetString(body);
73 |
74 | ActivityHelper.AddActivityTags(activity);
75 |
76 | logger.LogInformation("Message Received: " + message);
77 |
78 | var result = await cache.GetOrDefaultAsync("rabbit.message", string.Empty);
79 |
80 | if (string.IsNullOrEmpty(result))
81 | {
82 | logger.LogInformation("Add item into redis cache");
83 |
84 | await cache.SetAsync("rabbit.message",
85 | message,
86 | new FusionCacheEntryOptions
87 | {
88 | Duration = TimeSpan.FromSeconds(30)
89 | });
90 | }
91 | }
92 |
93 | }
94 | catch (Exception ex)
95 | {
96 | logger.LogError(ex, "There was an error processing the message");
97 | }
98 | }
99 |
100 |
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "Jaeger": {
10 | "Protocol": "http",
11 | "Host": "localhost",
12 | "Port": 4317
13 | },
14 | "Redis": {
15 | "Host": "localhost",
16 | "Port": "6379"
17 | },
18 | "RabbitMq": {
19 | "Host": "localhost"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/App4.RabbitConsumer.HostedService/wait.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | time="$1"
4 | shift
5 | cmd="$@"
6 |
7 | >&2 echo "Sleeping $time seconds"
8 | sleep $time
9 | >&2 echo "Wait is over"
10 | exec $cmd
--------------------------------------------------------------------------------
/OpenTelemetry.Tracing.Apps.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29806.167
5 | MinimumVisualStudioVersion = 15.0.26124.0
6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "App1.WebApi", "App1.WebApi\App1.WebApi.csproj", "{BE8536EF-3C9F-4719-94B9-860672867DB6}"
7 | EndProject
8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "App2.RabbitConsumer.Console", "App2.RabbitConsumer.Console\App2.RabbitConsumer.Console.csproj", "{81778BF9-1771-4D90-AEF3-ED27CC20B80E}"
9 | EndProject
10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "App3.WebApi", "App3.WebApi\App3.WebApi.csproj", "{19C5123C-2CF3-4760-B034-B9B823288B40}"
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "App4.RabbitConsumer.HostedService", "App4.RabbitConsumer.HostedService\App4.RabbitConsumer.HostedService.csproj", "{25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}"
13 | EndProject
14 | Global
15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
16 | Debug|Any CPU = Debug|Any CPU
17 | Debug|x64 = Debug|x64
18 | Debug|x86 = Debug|x86
19 | Release|Any CPU = Release|Any CPU
20 | Release|x64 = Release|x64
21 | Release|x86 = Release|x86
22 | EndGlobalSection
23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
24 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
26 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|x64.ActiveCfg = Debug|Any CPU
27 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|x64.Build.0 = Debug|Any CPU
28 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|x86.ActiveCfg = Debug|Any CPU
29 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Debug|x86.Build.0 = Debug|Any CPU
30 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
31 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|Any CPU.Build.0 = Release|Any CPU
32 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|x64.ActiveCfg = Release|Any CPU
33 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|x64.Build.0 = Release|Any CPU
34 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|x86.ActiveCfg = Release|Any CPU
35 | {BE8536EF-3C9F-4719-94B9-860672867DB6}.Release|x86.Build.0 = Release|Any CPU
36 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
37 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|Any CPU.Build.0 = Debug|Any CPU
38 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|x64.ActiveCfg = Debug|Any CPU
39 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|x64.Build.0 = Debug|Any CPU
40 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|x86.ActiveCfg = Debug|Any CPU
41 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Debug|x86.Build.0 = Debug|Any CPU
42 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|Any CPU.ActiveCfg = Release|Any CPU
43 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|Any CPU.Build.0 = Release|Any CPU
44 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|x64.ActiveCfg = Release|Any CPU
45 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|x64.Build.0 = Release|Any CPU
46 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|x86.ActiveCfg = Release|Any CPU
47 | {81778BF9-1771-4D90-AEF3-ED27CC20B80E}.Release|x86.Build.0 = Release|Any CPU
48 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
49 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|Any CPU.Build.0 = Debug|Any CPU
50 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|x64.ActiveCfg = Debug|Any CPU
51 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|x64.Build.0 = Debug|Any CPU
52 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|x86.ActiveCfg = Debug|Any CPU
53 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Debug|x86.Build.0 = Debug|Any CPU
54 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|Any CPU.ActiveCfg = Release|Any CPU
55 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|Any CPU.Build.0 = Release|Any CPU
56 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|x64.ActiveCfg = Release|Any CPU
57 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|x64.Build.0 = Release|Any CPU
58 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|x86.ActiveCfg = Release|Any CPU
59 | {19C5123C-2CF3-4760-B034-B9B823288B40}.Release|x86.Build.0 = Release|Any CPU
60 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
61 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
62 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|x64.ActiveCfg = Debug|Any CPU
63 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|x64.Build.0 = Debug|Any CPU
64 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|x86.ActiveCfg = Debug|Any CPU
65 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Debug|x86.Build.0 = Debug|Any CPU
66 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
67 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|Any CPU.Build.0 = Release|Any CPU
68 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|x64.ActiveCfg = Release|Any CPU
69 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|x64.Build.0 = Release|Any CPU
70 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|x86.ActiveCfg = Release|Any CPU
71 | {25059BE3-44DA-4FC3-BBB5-228E5CA7D6D8}.Release|x86.Build.0 = Release|Any CPU
72 | EndGlobalSection
73 | GlobalSection(SolutionProperties) = preSolution
74 | HideSolutionNode = FALSE
75 | EndGlobalSection
76 | GlobalSection(ExtensibilityGlobals) = postSolution
77 | SolutionGuid = {EE4BC86E-8F06-4C89-B66E-DA1C02CE3E09}
78 | EndGlobalSection
79 | EndGlobal
80 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **Introduction**
2 | This repository contains an example about how to use opentelemetry for tracing when we have a bunch of distributed applications
3 |
4 | # **Content**
5 |
6 | The repository contains the following applications:
7 |
8 | 
9 |
10 | - **App1.WebApi** is a **NET 8 API** with 2 endpoints.
11 | - The **/http** endpoint makes an HTTP request to the App2 _"/dummy"_ endpoint.
12 | - The **/publish-message** endpoint queues a message into a Rabbit queue named _"sample"_.
13 |
14 | - **App2.RabbitConsumer.Console** is a **NET 8 console** application.
15 | - Dequeues messages from the Rabbit _"sample"_ queue and makes a HTTP request to the **App3** _"/sql-to-event"_ endpoint with the content of the message.
16 |
17 | - **App3.WebApi** is a **NET 8 Minimal API** with 2 endpoints
18 | - The **/dummy** endpoint returns a fixed _"Ok"_ response.
19 | - The **/sql-to-event** endpoint receives a message via HTTP POST, stores it in a MSSQL Server and afterwards publishes the message as an event into a RabbitMq queue named _"sample_2"_.
20 |
21 | - **App4.RabbitConsumer.HostedService** is a **NET 8 Worker Service**.
22 | - A Hosted Service reads the messages from the Rabbitmq _"sample_2"_ queue and stores it into a Redis cache database.
23 |
24 | # **OpenTelemetry .NET Client**
25 |
26 | The apps are using the following package versions:
27 |
28 | ```xml
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | ```
37 |
38 | # **External Dependencies**
39 |
40 | - Jaeger
41 | - MSSQL Server
42 | - RabbitMq
43 | - Redis Cache
44 |
45 |
46 | # **How to run the apps**
47 |
48 | ## **Using docker-compose**
49 |
50 | The repository contains a **docker-compose** file that starts up the 4 apps and also the external dependencies.
51 | There is a **little caveat in the docker-compose**:
52 | - You can control the order of service startup and shutdown with the depends_on option. However, for startup Compose does not wait until a container is “ready” only until it’s running.
53 | That's a problem because both App3 and App4 need to wait for the rabbitMq container to be ready. To avoid this problem the docker-compose is overwriting the "entrypoint" for both apps and executing a shell script that makes both apps sleep 30 seconds before starting up.
54 |
55 | ## **Without using the docker-compose**
56 |
57 | If you **don't want to use the docker-compose file**, you can use docker to start the dependencies one by one.
58 |
59 | - Run a Jaeger image:
60 | ```shell
61 | docker run -d --name jaeger \
62 | -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
63 | -e COLLECTOR_OTLP_ENABLED=true \
64 | -p 6831:6831/udp \
65 | -p 6832:6832/udp \
66 | -p 5778:5778 \
67 | -p 16686:16686 \
68 | -p 4317:4317 \
69 | -p 4318:4318 \
70 | -p 14250:14250 \
71 | -p 14268:14268 \
72 | -p 14269:14269 \
73 | -p 9411:9411 \
74 | jaegertracing/all-in-one:latest
75 | ```
76 | - Run a Rabbitmq image:
77 |
78 | ```shell
79 | docker run -d --name some-rabbit \
80 | -p 15672:15672 \
81 | -p 5672:5672 \
82 | rabbitmq:3.13.1-management
83 | ```
84 | - Run a MSSQL Server
85 |
86 | ```shell
87 | docker run -e "ACCEPT_EULA=Y" \
88 | -e "SA_PASSWORD=Pass@Word1" \
89 | -p 1433:1433 \
90 | -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
91 | ```
92 |
93 | - Run a Redis immage:
94 |
95 | ```shell
96 | docker run -d --name some-redis \
97 | -p "6379:6379" \
98 | redis:7.2.4
99 | ```
100 |
101 | # Output
102 |
103 | If you open Jaeger, you are going to see something like this
104 |
105 | 
106 |
107 | # Changelog
108 |
109 | ### **04/15/2024**
110 | - Updated apps to .NET 8.
111 | - Updated ``OpenTelemetry`` packages to the latest available version. This update also addresses several known security vulnerabilities.
112 | - Updated ``System.Data.SqlClient`` to the latest available version to mitigate known security vulnerabilities.
113 | - From this point forward, ``App 1`` will function as a .NET 8 API that utilizes Controllers, while ``App 3`` will operate as a minimal API without controllers.
114 | - Deleted ``Startup.cs`` from both App 1 and App 3.
115 | - ``App 1`` and ``App 3`` now employ the newer ``WebApplication.CreateBuilder`` method for application construction, replacing the previous ``WebHost.CreateDefaultBuilder`` method.
116 | - ``App 4`` now utilizes the newer ``Host.CreateApplicationBuilder`` method to construct a ``Host``, replacing the previous ``Host.CreateDefaultBuilder`` method.
117 | - Implemented the C# 12 primary constructor feature across all apps.
118 | - Updated Dockerfile base image from ``Bullseye`` distro (Debian 11) to ``Bookworm`` distro (Debian 12).
119 | - ``App 4`` now employs the [FusionCache](https://github.com/ZiggyCreatures/FusionCache/tree/main) library with a Redis Backplane, replacing the use of ``IDistributedCache``.
120 | - Updated the ``docker-compose`` file to utilize the latest image versions of RabbitMQ, Redis, and Jaeger.
121 |
122 |
123 | ### **09/24/2023**
124 | - Updated apps to .NET 7.
125 | - Updated ``OpenTelemetry`` packages to the latest version.
126 | - Fix breaking changes on the apps due to the ``OpenTelemetry`` packages upgrade.
127 | - Removed the ``OpenTelemetry.Exporter.Jaeger`` NuGet package from the apps because it has been deprecated. It has been replaced by the ``OpenTelemetry.Exporter.OpenTelemetryProtocol`` package.
128 | - Updated the ``RabbitMQ.Client`` NuGet package to the latest version.
129 | - Updated the ``docker-compose`` file to use the newest image versions of rabbitmq, redis and jaeger. Also the jaeger image is configured so can it can receive OpenTelemetry trace data via the OpenTelemetry Protocol.
130 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.4'
2 |
3 | networks:
4 | tracing:
5 | name: tracing-network
6 |
7 | services:
8 | rabbitmq:
9 | image: rabbitmq:3.13.1-management
10 | ports:
11 | - 15672:15672
12 | - 5672
13 | networks:
14 | - tracing
15 |
16 | sqlserver:
17 | image: mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
18 | environment:
19 | - ACCEPT_EULA=Y
20 | - SA_PASSWORD=Pass@Word1
21 | ports:
22 | - 1433
23 | networks:
24 | - tracing
25 |
26 | redis:
27 | image: redis:7.2.4
28 | ports:
29 | - 6379:6379
30 | networks:
31 | - tracing
32 |
33 | jaeger:
34 | image: jaegertracing/all-in-one:1.56.0
35 | container_name: jaeger
36 | restart: unless-stopped
37 | ports:
38 | - 5775:5775/udp
39 | - 6831:6831/udp
40 | - 6832:6832/udp
41 | - 5778:5778
42 | - 16686:16686
43 | - 14250:14250
44 | - 14268:14268
45 | - 14269:14269
46 | - 4317:4317
47 | - 4318:4318
48 | - 9411:9411
49 | networks:
50 | - tracing
51 | environment:
52 | COLLECTOR_OTLP_ENABLED: true
53 |
54 | app1:
55 | build:
56 | context: ./App1.WebApi
57 | ports:
58 | - "5000:8080"
59 | networks:
60 | - tracing
61 | depends_on:
62 | - rabbitmq
63 | - jaeger
64 | - app3
65 | environment:
66 | Jaeger__Protocol: http
67 | Jaeger__Port: 4317
68 | Jaeger__Host: jaeger
69 | RabbitMq__Host: rabbitmq
70 | App3Endpoint: http://app3:8080
71 |
72 | app2:
73 | stdin_open: true
74 | tty: true
75 | build:
76 | context: ./App2.RabbitConsumer.Console
77 | networks:
78 | - tracing
79 | depends_on:
80 | - rabbitmq
81 | - jaeger
82 | - app3
83 | entrypoint: ["./wait.sh", "30", "dotnet", "App2.RabbitConsumer.Console.dll"]
84 | environment:
85 | Jaeger__Protocol: http
86 | Jaeger__Port: 4317
87 | Jaeger__Host: jaeger
88 | RabbitMq__Host: rabbitmq
89 | App3UriEndpoint: http://app3:8080
90 |
91 |
92 | app3:
93 | build:
94 | context: ./App3.WebApi
95 | ports:
96 | - "5001:8080"
97 | networks:
98 | - tracing
99 | depends_on:
100 | - rabbitmq
101 | - jaeger
102 | - sqlserver
103 | environment:
104 | Jaeger__Protocol: http
105 | Jaeger__Port: 4317
106 | Jaeger__Host: jaeger
107 | RabbitMq__Host: rabbitmq
108 | SqlDbConnString: server=sqlserver;user id=sa;password=Pass@Word1;
109 |
110 |
111 |
112 | app4:
113 | build:
114 | context: ./App4.RabbitConsumer.HostedService
115 | networks:
116 | - tracing
117 | depends_on:
118 | - rabbitmq
119 | - jaeger
120 | - redis
121 | entrypoint: ["./wait.sh", "30", "dotnet", "App4.RabbitConsumer.HostedService.dll"]
122 | environment:
123 | Jaeger__Protocol: http
124 | Jaeger__Port: 4317
125 | Jaeger__Host: jaeger
126 | RabbitMq__Host: rabbitmq
127 | Redis__Host: redis
128 | Redis__Port: 6379
129 |
130 |
--------------------------------------------------------------------------------
/docs/components-diagram.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/components-diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karlospn/opentelemetry-tracing-demo/d723f599dbb437500997e44ccc63e27dc0dfcec5/docs/components-diagram.png
--------------------------------------------------------------------------------
/docs/jaeger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karlospn/opentelemetry-tracing-demo/d723f599dbb437500997e44ccc63e27dc0dfcec5/docs/jaeger.png
--------------------------------------------------------------------------------