译MassTransit 消息契约

简介: 消息契约 在MassTransit中,使用.NET .NET系统定义消息契约。消息可以使用类和接口来定义,但是,建议类型使用只读属性而不使用行为。 注意:强烈建议使用消息接口的接口,基于多年的经验,具有不同级别的开发经验。

消息契约

在MassTransit中,使用.NET .NET系统定义消息契约。消息可以使用类和接口来定义,但是,建议类型使用只读属性而不使用行为。

注意:强烈建议使用消息接口的接口,基于多年的经验,具有不同级别的开发经验。MassTransit 将为消息创建动态接口实现,确保消息契约与消费者的干净分离。

下面显示了一个更新客户地址的示例消息。

namespace Company.Application.Contracts
{
using System;

public interface UpdateCustomerAddress
{
Guid CommandId { get; }
DateTime Timestamp { get; }
string CustomerId { get; }
string HouseNumber { get; }
string Street { get; }
string City { get; }
string State { get; }
string PostalCode { get; }
}
}

工程师在消息传递方面的一个常见错误是为消息创建基类,并尝试在消费者中分配基类——包括子类的行为。哎哟。这总是导致痛苦和痛苦,所以对基类说“不”。

指定消息名称
有两种主要的消息类型:事件和命令。当选择一个消息的名称时,消息的类型应该指定消息的时态。

命令

命令告诉服务做某事。命令(使用Send)发送到端点,因为预期单个服务实例执行命令操作。命令不应该发布。

命令应该以动词-名词顺序来表达,遵循the_tell_style风格
示例命令:

  • UpdateCustomerAddress
  • UpgradeCustomerAccount
  • SubmitOrder

 

事件

事件意味着某事发生了。事件(使用Publish)使用IBus 或ConsumeContext 发布。事件不应直接发送到端点。

事件应以名词-动词 (过去时态) 序列表示, 表明发生了某事。 

示例事件:

  • CustomerAddressUpdated
  • CustomerAccountUpgraded
  • OrderSubmitted, OrderAccepted, OrderRejected, OrderShipped

消息相关性
由于消息通常不是孤立的,发布一条消息通常会导致发布另一条消息,然后再发布另一条消息,等等。跟踪这些序列是有用的,然而,要找到它们,需要有一些信息详细描述它们是如何相互关联的。

相关性是将消息连接在一起的原理,通常是通过使用在逻辑序列的一部分中包含的唯一标识符。在MassTransit 中,唯一标识符被称为CorrelationId,它包含在消息信封中,并通过ConsumeContext 或SendContext提供。MassTransit 还包括一个会话ID,在整个相关消息集合中都是相同的。

MassTransit 支持不同的方法来指定相关性。查看消息相关性文章以获取更多信息。

目录
相关文章
|
6月前
|
消息中间件 存储 监控
中间件消息发布者功能特性
【6月更文挑战第11天】
50 5
|
6月前
|
XML 监控 中间件
中间件消息发布者角色定位
【6月更文挑战第11天】
55 5
|
6月前
|
消息中间件 存储 架构师
|
消息中间件
译MassTransit 创建消息消费者
创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer接口,T为消息类型 public class UpdateCustomerConsumer : IConsumer { public async Task Consume(ConsumeContext context) { await Console.
1646 0
译MassTransit 生产消息
生产消息 应用程序或服务可以使用两种不同的方法生产消息。可以使用Sead发送消息,也可以使用Publish发布消息。每个方法的行为是非常不同的,但是通过查看每个特定方法所涉及的消息类型,可以很容易理解。
892 0
|
移动开发 算法 网络协议
无所不能的RPC消息协议是如何设计的?
本文将了解RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。
1607 0