PublishRequest<T> v5.x 中等效的 IBus 扩展
PublishRequest<T> IBus extension equivalent in v5.x
从 IBus 接口中删除了 v5 PublishRequest 扩展。
我们使用回调来处理可以从消费者返回的多种响应类型(故障、验证、实际响应等)
发布消息和连接多种响应类型的等效方法是什么?
// Request/Response contracts, may also return validation failure or fault contract
Request<TMessage> request = await bus.PublishRequest<TMessage>( msg, context => {
context.Handle<TResponse>( value => ... );
context.Handle<TValidation>( value => ... );
context.Handle<Fault>( value => ... );
context.CorrelationId = ...
context.Headers.Set( ... );
});
await request.Task;
您可以使用新语法,整体上更简洁。
var client = Bus.CreateRequestClient<RegisterMember>();
var (registered, existing) =
await client.GetResponse<MemberRegistered, ExistingMemberFound>(
new RegisterMember() {MemberId = "Johnny5"});
这将 return 两个响应中的任何一个,如果发生错误,任何一个都会抛出错误的请求异常。
您还可以使用请求句柄添加 headers 等
var client = Bus.CreateRequestClient<RegisterMember>();
var request = client.Create(new RegisterMember()
{MemberId = "Johnny5"});
// the request is also the send pipe configurator, so...
request.UseExecute(context => context.CorrelationId = someId);
var (registered, existing) =
await request.GetResponse<MemberRegistered, ExistingMemberFound>();
您可以在以后的测试中看到一个有效的测试用例:
从 IBus 接口中删除了 v5 PublishRequest 扩展。
我们使用回调来处理可以从消费者返回的多种响应类型(故障、验证、实际响应等)
发布消息和连接多种响应类型的等效方法是什么?
// Request/Response contracts, may also return validation failure or fault contract
Request<TMessage> request = await bus.PublishRequest<TMessage>( msg, context => {
context.Handle<TResponse>( value => ... );
context.Handle<TValidation>( value => ... );
context.Handle<Fault>( value => ... );
context.CorrelationId = ...
context.Headers.Set( ... );
});
await request.Task;
您可以使用新语法,整体上更简洁。
var client = Bus.CreateRequestClient<RegisterMember>();
var (registered, existing) =
await client.GetResponse<MemberRegistered, ExistingMemberFound>(
new RegisterMember() {MemberId = "Johnny5"});
这将 return 两个响应中的任何一个,如果发生错误,任何一个都会抛出错误的请求异常。
您还可以使用请求句柄添加 headers 等
var client = Bus.CreateRequestClient<RegisterMember>();
var request = client.Create(new RegisterMember()
{MemberId = "Johnny5"});
// the request is also the send pipe configurator, so...
request.UseExecute(context => context.CorrelationId = someId);
var (registered, existing) =
await request.GetResponse<MemberRegistered, ExistingMemberFound>();
您可以在以后的测试中看到一个有效的测试用例: