Create REST Publisher¶
This page shows how to create a RabbitMQ REST publisher manually.
The available implementations are:
StatelessRestPublisherBound
FullDuplexRestPublisherBound
Choose The Publisher¶
| Publisher | Description |
|---|---|
StatelessRestPublisherBound |
Sends requests without waiting for a response. |
FullDuplexRestPublisherBound |
Sends requests and waits for a correlated response. |
Create Connection And Channel¶
var factory = new ConnectionFactory
{
HostName = "localhost",
UserName = "guest",
Password = "guest",
DispatchConsumersAsync = true
};
using var connection =
factory.CreateConnection("rest-publisher-demo");
using var channel =
connection.CreateChannel();
For the RabbitMQ.Client v7 provider, CreateChannel() supports an optional delivery confirmation parameter used to enable publisher confirms during channel creation.
Create Formatter¶
This guide assumes that an IDataFormatter instance has already been created.
See:
- Getting Started → Create Formatter
IDataFormatter formatter = ...;
Create REST Message Serializer¶
var streamResolver =
new FuncMemoryStreamResolver(
() => new MemoryStream(),
bytes => new MemoryStream(bytes));
IHttpRestMessageSerializer messageSerializer =
new HttpRestMessageSerializer(
streamResolver,
Encoding.UTF8);
Create Descriptor¶
var descriptor =
new RestPublisherBoundDescriptor
{
ServiceName = "pricing",
Durable = true,
Timeout = TimeSpan.FromSeconds(30),
ContextType = HttpHeaders.JsonContentType,
IncludeContent = true
};
Create Publisher¶
await using var publisher =
new FullDuplexRestPublisherBound(
descriptor,
channel,
formatter,
messageSerializer);
Send A Request¶
var request =
new RestRequest
{
Method = "POST",
Path = "/api/pricing/calculate",
Data = new CalculatePriceRequest
{
ProductId = Guid.NewGuid(),
Quantity = 2
}
};
var response =
await publisher.SendAsync<CalculatePriceResponse>(
request);
Runtime Flow¶
sequenceDiagram
participant Client
participant Publisher
participant RabbitMQ
participant RestHost
Client->>Publisher: RestRequest
Publisher->>RabbitMQ: Publish
RabbitMQ->>RestHost: Deliver
RestHost-->>RabbitMQ: Response
RabbitMQ-->>Publisher: Deliver
Publisher-->>Client: RestResponse
Next Step¶
Continue with:
- Create REST Subscriber
- ASP.NET Core Integration
- IAsyncRestPublisher