This commit is contained in:
Sipke Schoorstra 2024-02-25 13:27:19 +01:00
commit 7b0871750d
9 changed files with 193 additions and 0 deletions

View file

@ -140,6 +140,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.AspNet.Webhook
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.AspNet.MassTransitActivities", "samples\aspnet\Elsa.Samples.AspNet.MassTransitActivities\Elsa.Samples.AspNet.MassTransitActivities.csproj", "{A1A8AD89-C9C4-41BF-BBCB-EF0544A28BFB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.AspNet.MassTransitWorkflow", "samples\aspnet\Elsa.Samples.AspNet.MassTransitWorkflow\Elsa.Samples.AspNet.MassTransitWorkflow.csproj", "{086A7E2A-6CE7-41DA-927B-C033638060B1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ProtoActor.Cluster.AzureContainerApps", "src\modules\Elsa.ProtoActor.Cluster.AzureContainerApps\Elsa.ProtoActor.Cluster.AzureContainerApps.csproj", "{9F79BBEC-02CE-4F76-AED4-BC191DA3054B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.AspNet.AzureServiceBusActivities", "samples\aspnet\Elsa.Samples.AspNet.AzureServiceBusActivities\Elsa.Samples.AspNet.AzureServiceBusActivities.csproj", "{C25CFDCF-8E06-4DD8-A83E-FF7EF9FDA02E}"
@ -780,6 +782,10 @@ Global
{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3}.Release|Any CPU.Build.0 = Release|Any CPU
{086A7E2A-6CE7-41DA-927B-C033638060B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{086A7E2A-6CE7-41DA-927B-C033638060B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{086A7E2A-6CE7-41DA-927B-C033638060B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{086A7E2A-6CE7-41DA-927B-C033638060B1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -918,6 +924,7 @@ Global
{A516931E-EDBB-4FC3-BB94-1BB824D5BC61} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{BBCE36D1-6767-4ED1-B3E8-84D2567A962A} = {A516931E-EDBB-4FC3-BB94-1BB824D5BC61}
{73BBB1E3-AEEC-44E8-83D7-6DD9CD687FE3} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{086A7E2A-6CE7-41DA-927B-C033638060B1} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D4B5CEAA-7D70-4FCB-A68E-B03FBE5E0E5E}

View file

@ -21,6 +21,7 @@ builder.Services.AddElsa(elsa =>
elsa.UseWorkflowRuntime(runtime =>
{
runtime.UseEntityFrameworkCore();
runtime.UseMassTransitDispatcher();
});
// Expose API endpoints.

View file

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\bundles\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.CSharp\Elsa.CSharp.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.EntityFrameworkCore.Sqlite\Elsa.EntityFrameworkCore.Sqlite.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.EntityFrameworkCore\Elsa.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.Http\Elsa.Http.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.Identity\Elsa.Identity.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.Liquid\Elsa.Liquid.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.MassTransit.RabbitMq\Elsa.MassTransit.RabbitMq.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.MassTransit\Elsa.MassTransit.csproj" />
<ProjectReference Include="..\..\..\src\modules\Elsa.Workflows.Api\Elsa.Workflows.Api.csproj" />
</ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="Pages\Index.cshtml" />
<_ContentIncludedByDefault Remove="Pages\_ViewImports.cshtml" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,29 @@
using Elsa.Samples.AspNet.MassTransitWorkflow.Messages;
using FastEndpoints;
using MassTransit;
namespace Elsa.Samples.AspNet.MassTransitWorkflow.Endpoints.Messages.Create;
public class Create : EndpointWithoutRequest
{
private readonly IBus _bus;
public Create(IBus bus)
{
_bus = bus;
}
public override void Configure()
{
Post("messages");
AllowAnonymous();
}
public override async Task HandleAsync(CancellationToken cancellationToken)
{
await _bus.Publish<Message>(new Message
{
Content = "Hello World from the bus."
}, cancellationToken);
}
}

View file

@ -0,0 +1,6 @@
namespace Elsa.Samples.AspNet.MassTransitWorkflow.Messages;
public class Message
{
public string Content { get; set; }
}

View file

@ -0,0 +1,45 @@
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using Elsa.Extensions;
using Elsa.Samples.AspNet.MassTransitWorkflow.Messages;
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!;
// Add services to the container.
builder.Services.AddElsa(elsa =>
{
// Configure management feature to use EF Core.
elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore());
// Configure runtime feature to use EF Core.
elsa.UseWorkflowRuntime(runtime =>
{
runtime.UseEntityFrameworkCore();
runtime.UseMassTransitDispatcher();
});
// Expose API endpoints.
elsa.UseWorkflowsApi(api => api.AddFastEndpointsAssembly<Program>());
// Register programmatically defined workflows.
elsa.AddWorkflowsFrom<Program>();
// Configure MassTransit.
elsa.UseMassTransit(massTransit =>
{
// massTransit.UseRabbitMq(rabbitMqConnectionString);
massTransit.AddMessageType<Message>();
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseWorkflowsApi();
app.MapGet("/", ctx => ctx.Response.WriteAsync("Call 'POST /elsa/api/messages' to send a message over MassTransit."));
app.Run();

View file

@ -0,0 +1,37 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:38703",
"sslPort": 44342
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5207",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7299;http://localhost:5207",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View file

@ -0,0 +1,31 @@
using Elsa.MassTransit.Activities;
using Elsa.Samples.AspNet.MassTransitWorkflow.Messages;
using Elsa.Workflows;
using Elsa.Workflows.Activities;
using Elsa.Workflows.Contracts;
using Elsa.Workflows.Helpers;
namespace Elsa.Samples.AspNet.MassTransitWorkflow.Workflows;
public class MessagingWorkflow : WorkflowBase
{
protected override void Build(IWorkflowBuilder builder)
{
var busMessage = builder.WithVariable<Message>();
builder.Root = new Sequence
{
Activities =
{
new MessageReceived
{
CanStartWorkflow = true,
Type = ActivityTypeNameHelper.GenerateTypeName(typeof(Message)),
MessageType = typeof(Message),
Result = new (busMessage)
},
new WriteLine(context => $"Received message from Bus: {busMessage.Get(context)?.Content}")
}
};
}
}

View file

@ -0,0 +1,13 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RabbitMq": "rabbitmq://guest:guest@localhost"
}
}