Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Brighter.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
<Project Path="samples/Scheduler/QuartzTaskQueue/GreetingsPumper/GreetingsPumper.csproj" />
<Project Path="samples/Scheduler/QuartzTaskQueue/GreetingsReceiverConsole/GreetingsReceiverConsole.csproj" />
</Folder>
<Folder Name="/samples/Scheduler/TickerQ/">
<File Path="samples/Scheduler/TickerQ/README.md" />
<Project Path="samples/Scheduler/TickerQ/Greeting.AppHost/Greeting.AppHost.csproj" />
<Project Path="samples/Scheduler/TickerQ/Greeting.Consumer/Greeting.Consumer.csproj" />
<Project Path="samples/Scheduler/TickerQ/Greeting.Models/Greeting.Models.csproj" />
<Project Path="samples/Scheduler/TickerQ/Greeting.Producer/Greeting.Producer.csproj" />
<Project Path="samples/Scheduler/TickerQ/Greeting.ServiceDefaults/Greeting.ServiceDefaults.csproj" />
</Folder>
<Folder Name="/samples/TaskQueue/" />
<Folder Name="/samples/TaskQueue/ASBTaskQueue/">
<Project Path="samples/TaskQueue/ASBTaskQueue/Greetings/Greetings.csproj" />
Expand Down
16 changes: 14 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
<AWSSDKExtensionsNETCoreSetup>4.0.3.22</AWSSDKExtensionsNETCoreSetup>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Aspire.Hosting.AppHost" Version="13.1.2" />
<PackageVersion Include="Aspire.Hosting.RabbitMQ" Version="13.1.2" />
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="[3.7.500.5, 4)" />
<PackageVersion Include="AWSSDK.IdentityManagement" Version="[3.7.500.5, 4)" />
<PackageVersion Include="AWSSDK.Extensions.NETCore.Setup" Version="[3.7.400, 4)" />
Expand Down Expand Up @@ -58,7 +60,7 @@
<PackageVersion Include="MassTransit.AmazonSQS" Version="9.0.1" />
<PackageVersion Include="MassTransit.Extensions.DependencyInjection" Version="7.3.1" />
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="5.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.3" />
<PackageVersion Include="Microsoft.Bcl.TimeProvider" Version="10.0.3" />
Expand All @@ -74,6 +76,8 @@
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.3.0" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.3.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.3" />
Expand Down Expand Up @@ -103,7 +107,9 @@
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.14.0-beta.1" />
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.14.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.0"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.0"/>
<PackageVersion Include="Paramore.Darker" Version="4.1.1" />
<PackageVersion Include="Paramore.Darker.AspNetCore" Version="4.1.1" />
<PackageVersion Include="Paramore.Darker.Policies" Version="4.1.1" />
Expand Down Expand Up @@ -150,24 +156,30 @@
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.22" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.22" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.22" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.22" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="8.0.22" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.22" />
<PackageVersion Include="MongoDB.EntityFrameworkCore" Version="8.3.3" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
<PackageVersion Include="Npgsql" Version="8.0.7" />
<PackageVersion Include="TickerQ" Version="8.0.0" />
<PackageVersion Include="TickerQ.Dashboard" Version="8.0.0" />
<PackageVersion Include="TickerQ.EntityFrameworkCore" Version="8.0.0" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net9.0' ">
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="9.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.11" />
<PackageVersion Include="MongoDB.EntityFrameworkCore" Version="9.0.3" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0" />
<PackageVersion Include="Npgsql" Version="10.0.1" />
<PackageVersion Include="TickerQ" Version="9.0.0" />
<PackageVersion Include="TickerQ.Dashboard" Version="9.0.0" />
<PackageVersion Include="TickerQ.EntityFrameworkCore" Version="9.0.0" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net10.0' ">
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.2" />
Expand Down
18 changes: 18 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.AppHost/AppHost.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Microsoft.Extensions.DependencyInjection;

var builder = DistributedApplication.CreateBuilder(args);

var username = builder.AddParameter("username", "guest", secret: true);
var password = builder.AddParameter("password", "guest", secret: true);

var rabbitmq = builder.AddRabbitMQ("messaging", username, password)
.WithManagementPlugin();

builder.AddProject<Projects.Greeting_Producer>("greeting-producer")

.WithReference(rabbitmq);

builder.AddProject<Projects.Greeting_Consumer>("greeting-consumer")
.WithReference(rabbitmq);

builder.Build().Run();
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<Sdk Name="Aspire.AppHost.Sdk" Version="9.5.0" />

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UserSecretsId>3a3c00ef-01a0-49f2-9ad2-dbb7edddd60a</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" />
<PackageReference Include="Aspire.Hosting.RabbitMQ" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Greeting.Consumer\Greeting.Consumer.csproj" />
<ProjectReference Include="..\Greeting.Producer\Greeting.Producer.csproj" />
</ItemGroup>


</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17275;http://localhost:15245",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21117",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22259"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15245",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19117",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20156"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
9 changes: 9 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.AppHost/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter.MessagingGateway.RMQ.Async\Paramore.Brighter.MessagingGateway.RMQ.Async.csproj" />
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection\Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection.csproj" />
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter.ServiceActivator.Extensions.Hosting\Paramore.Brighter.ServiceActivator.Extensions.Hosting.csproj" />
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter.ServiceActivator\Paramore.Brighter.ServiceActivator.csproj" />
<ProjectReference Include="..\Greeting.Models\Greeting.Models.csproj" />
<ProjectReference Include="..\Greeting.ServiceDefaults\Greeting.ServiceDefaults.csproj" />
</ItemGroup>

</Project>
21 changes: 21 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.Consumer/GreetingHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Greeting.Models;
using Paramore.Brighter;

namespace Greeting.Consumer
{
public class GreetingHandler : RequestHandlerAsync<GreetingEvent>
{
private readonly ILogger<GreetingHandler> _logger;

public GreetingHandler(ILogger<GreetingHandler> logger)
{
_logger = logger;
}
public override Task<GreetingEvent> HandleAsync(GreetingEvent command, CancellationToken cancellationToken = default)
{
_logger.LogInformation("Hello {Name}", command.Name);
return base.HandleAsync(command, cancellationToken);
}

}
}
61 changes: 61 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.Consumer/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using Greeting.Consumer;
using Greeting.Models;
using Paramore.Brighter;
using Paramore.Brighter.MessagingGateway.RMQ.Async;
using Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection;
using Paramore.Brighter.ServiceActivator.Extensions.Hosting;


var builder = WebApplication.CreateBuilder(args);

builder.AddServiceDefaults();
var cnstring = builder.Configuration.GetConnectionString("messaging");
var rmqConnection = new RmqMessagingGatewayConnection
{
AmpqUri = new AmqpUriSpecification(new Uri(cnstring)),
Exchange = new Exchange("paramore.brighter.exchange"),
};

// Register the existing handler(s)
builder.Services.AddTransient(typeof(GreetingHandler));


builder.Services.AddConsumers(opt =>
{
opt.Subscriptions = new Subscription[]
{
new RmqSubscription<GreetingEvent>(
new SubscriptionName("paramore.example.greeting"),
new ChannelName("greeting.event"),
new RoutingKey("greeting.event"),
makeChannels: OnMissingChannel.Create,
messagePumpType: MessagePumpType.Proactor
),
};

opt.DefaultChannelFactory = new ChannelFactory(
new RmqMessageConsumerFactory(rmqConnection)
);

})
.AutoFromAssemblies();

builder.Services
.AddHostedService<ServiceActivatorHostedService>();


var app = builder.Build();

app.MapDefaultEndpoints();


app.UseHttpsRedirection();

app.MapGet("/", () =>
{
return "helloConsumer";
});

app.Run();


Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5237",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:7122;http://localhost:5237",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@TickerQ.Consumer_HostAddress = http://localhost:5237

GET {{TickerQ.Consumer_HostAddress}}/weatherforecast/
Accept: application/json

###
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter.MessagingGateway.RMQ.Async\Paramore.Brighter.MessagingGateway.RMQ.Async.csproj" />
<ProjectReference Include="..\..\..\..\src\Paramore.Brighter\Paramore.Brighter.csproj" />
</ItemGroup>

</Project>
16 changes: 16 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.Models/GreetingEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Paramore.Brighter;

namespace Greeting.Models
{
public class GreetingEvent : Event
{
public GreetingEvent() : base(Id.Random()) { }

public GreetingEvent(string name) : base(Id.Random())
{
Name = name;
}

public string Name { get; set; } = string.Empty;
}
}
27 changes: 27 additions & 0 deletions samples/Scheduler/TickerQ/Greeting.Models/GreetingMapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Text.Json;
using Paramore.Brighter;
using Paramore.Brighter.JsonConverters;

namespace Greeting.Models
{
public class GreetingMapper : IAmAMessageMapper<GreetingEvent>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can just use a default mapper now, and I am slowly trying to move our samples over, except for the ones that demonstrate explicit mapping, or transformer pipelines

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok thats awesome i didn't know this before
done know

{
public IRequestContext? Context { get; set; }
public GreetingMapper()
{

}
public Message MapToMessage(GreetingEvent request, Publication publication)
{
var header = new MessageHeader(messageId: request.Id, topic: publication.Topic, messageType: MessageType.MT_EVENT);
var body = new MessageBody(JsonSerializer.Serialize(request, JsonSerialisationOptions.Options));
var message = new Message(header, body);
return message;
}

public GreetingEvent MapToRequest(Message message)
{
return JsonSerializer.Deserialize<GreetingEvent>(message.Body.Bytes)!;
}
}
}
Loading
Loading