sweetlandj / platibus Goto Github PK
View Code? Open in Web Editor NEWDecentralized asynchronous messaging framework
License: MIT License
Decentralized asynchronous messaging framework
License: MIT License
Implement ISubscriptionTrackingService backed by ADO.NET provider to support storing subscription information in a database.
For getting the status of the queue, memory usage, and statistics something like 'GET /queues/myqueue' or similar would be helpful.
Implement IMessageQueueingService with MongoDB backend.
SQLite message queueing service.
Implement IMessageQueueingService backed by an ADO.NET provider to allow messages to be queued in a database.
Currently handler queues are named by taking the MD5 hash of the handler type name. This is done to ensure that the queue names:
We need to continue to meet the above goals while addressing the following:
Possible solutions:
I think it'd be super nice to have some UI add-on for ASP.NET (maybe a middleware) that can show real-time or history message traffic from Platibus. I think this would help a lot with dev, debugging, and the overall understanding of messaging in the application and between other application.
Would you prefer to have something like this added to this repo or another repo?
Implement ISubscriptionTrackingService with MongoDB backend
Introduce a container abstraction that can be used to register Platibus components such as:
This would enable external dependencies to be injected i.e. into an IConfigurationHook implementation and message handlers without relying on assembly scanning and service locators.
Calls to IBus.Send(object, EndpointName, SendOptions, CancellationToken)
fail with EndpointNotFoundException
when using the LoopbackHost
despite the inability to configure endpoints in the LoopbackConfiguration
.
Messages should be "looped back" to the originating bus instance and handled there according to the handling rules that have been registered.
EndpointNotFoundException
is thrown from the call to IBus.Send
.
Implement a transport service that uses RabbitMQ queues to communicate messages and subscription requests between applications. Each application could have a queue each for inbound messages, and one queue per topic, using fanout exchanges to publish messages to the topic queues. Subscription requests would just set up consumers listening to the remote topic queues. Direct message delivery would occur by simply publishing messages to the receiving applications inbound queue.
TODO: come up with a URI scheme / base URI syntax for queue naming. Possible examples:
Determine whether it is possible to create an ITransportService based on SignalR. The goal would be to see whether we could support async messaging from a Javascript client (i.e. browser) and a Pluribus server. It would also be interesting to see if SignalR could be used for server-to-server communications as well.
Bummer I can't submit a PR to the wiki because of how it works on GitHub, but I pushed my own fork with the addition here.
https://github.com/tdbrian/PlatibusWiki/blob/master/1.-Installation.md#platibusaspnetcore
AspNetCore support is provided in the Platibus.AspNetCore
package. This package allows for configuration through ConfigurePlatibus
on the IServiceCollection and middleware setup through UsePlatibusMiddleware
on the IApplicationBuilder. This library provides a .Net Core logging sink as well.
To install, search for and install the package Platibus.AspNetCore
in the NuGet package manager or run the following PowerShell command from the NuGet Package Manager Console:
PM> Install-Package Platibus.AspNetCore
Investigate using an IHttpHandlerFactory that will create and cache PlatibusHttpHandler instances dynamically based on the baseUri attributes specified in PlatibusConfigSections in web.config.
This will enable support for multiple instances of Platibus in a single IIS-hosed web app, and will eliminate the need to ensure that the host, ports, and paths for the site, PlatibusConfigurationSection, and configuration all match.
The HTTP transport currently supports NTLM authentication by using the default network credentials when making requests to the server. This needs to be more configurable to allow the client to specify whether credentials should be sent; whether NTLM or basic auth should be used; and to override credentials if necessary.
Subscriptions fail when a trailing slash is not included in the base URI. The HTTP transport service should implement better logic for concatenating URI path segments so that the trailing slash is not required.
Create StartTransaction
extension method for IMessageContext
that will create and return a new TransactionScope
and register a delegate on the Transaction.Current.TransactionCompleted
event that will call IMessageContext.Acknowledge()
if the transaction status is TransactionStatus.Committed
.
Example usage:
using (var scope = messageContext.StartTransaction())
{
// Do work
scope.Complete();
}
Intro documentation and quick-start guide for Github landing page
Implement abstractions (IMessageJournalingService) and implementation (FilesystemMessageJournalingService) for journaling inbound and outbound messages. Add journaling service configuration to IPluribusConfiguration, PluribusConfiguration, and PluribusConfigurationSection. Wire up journaling service based on configuration in Bootstrapper.
Events to capture:
Provide an IMessageJournal implementation that reads and writes message journal entries in ElasticSearch
If a message is sent with the UseDurableTransport=false send option then that should be conveyed to the receiver. The receiver, at its discretion, can honor that flag and immediately process the message in the handling thread (Bus.OnMessageReceived) rather than queueing and returning immediately. In this case, the HTTP response code would be 200 OK or a specific 4XX/5XX error code rather than 201 Accepted.
Determine whether it is feasible to implement IMessageQueuingService based on RabbitMQ given the current contracts. Determine what if any changes need to be made to the interface to support RabbitMQ.
Do a Redis implementation of the IMessageQueueingService
Implement a REST API that will enable remote Platibus instances to request configuration from a primary instance or configuration server. In addition, provide an IPlatibusConfiguration implementation that will make this call and retrieve configuration from the remote server, as well as a ConfigurationSection that can be used to declaratively specify the base URIs of the primary instance / configuration server. Finally, provide an ISubscriptionTrackingService that will POST or DELETE subscription info to the primary instance / configuration server as it is updated.
We should create an IConfigurationProvider abstraction with multiple implementation such as:
In the future we might want to consider an IBus shim implementation that will "phone home" and update its configuration (creating a new bus instance) and then swap out the old instance for the new instance when configuration changes in a way that is transparent to any consumers o the IBus interface.
Add a discrete timestamp column to the PB_MessageJournal table to enable roll-off of older messages by date.
Provide an IDiagnosticEventSink that writes directly to ElasticSearch
Provide a means to prevent journaling of sent messages; received messages; and/or published messages depending on the needs of the application.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.