消息契约

在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 支持不同的方法来指定相关性。查看消息相关性文章以获取更多信息。

译MassTransit 消息契约的更多相关文章

  1. 译MassTransit 生产消息

    生产消息 应用程序或服务可以使用两种不同的方法生产消息.可以使用Sead发送消息,也可以使用Publish发布消息.每个方法的行为是非常不同的,但是通过查看每个特定方法所涉及的消息类型,可以很容易理解 ...

  2. 重温WCF之消息契约(MessageContract)(六)

    对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息.比如:在一些情况下,具有这样的要 ...

  3. C# 的 WCF文章 消息契约(Message Contract)在流(Stream )传输大文件中的应用

    我也遇到同样问题,所以抄下做MARK http://www.cnblogs.com/lmjq/archive/2011/07/19/2110319.html 刚做完一个binding为netTcpBi ...

  4. WCF契约之---服务契约 、数据契约、 消息契约

    本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或 ...

  5. WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化

    原文:WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制 ...

  6. wcf消息契约

    1.最多一个参数和一个返回值,返回值和参数的类型都是消息类型. 下面的代码为定义一个消息契约的实例 [MessageContract]    public class MyMessage    {   ...

  7. WCF 之 消息契约(MessageContract)

    对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息. 比如:在一些情况下,具有这样的 ...

  8. WCF把书读薄(3)——数据契约、消息契约与错误契约

    上一篇:WCF把书读薄(2)——消息交换.服务实例.会话与并发 十二.数据契约 在实际应用当中数据不可能仅仅是以int Add(int num1, int num2)这种简单的几个int的方式进行传输 ...

  9. 译MassTransit 创建消息消费者

    创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer<T>接口,T为消息类型 public class UpdateCustomerConsumer ...

随机推荐

  1. JDBC详解(汇总)

    from:http://www.cnblogs.com/lee/archive/2007/08/25/869656.html:http://blog.csdn.net/lovesomnus/artic ...

  2. objc写一个NSMutableArray不连续索引替换对象的方法

    NSMutableArray内置的方法-(void)replaceObjectsAtIndexes:(NSIndexSet*)set withObjects:(NSArray*)objs 只能替换一段 ...

  3. redis注册成window服务

    注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...

  4. LeetCode(65)-Power of Four

    题目: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example ...

  5. EventBus3.0 study

    概述 eventbus出来很久了,最近想用一下eventbus,自己对着一些博客撸了一个demo,发现竟然crash了,然后去看看源码发现3.0的eventbus有了很多改动.技术变化真快,得保持谦虚 ...

  6. 排序算法入门之归并排序(java实现)

    归并排序是采用分治法的典型应用. 参考<数据结构与算法分析-Java语言描述> 归并排序其实要做两件事: (1)"分解"--将序列每次折半划分. (2)"合并 ...

  7. mysql史上最全的学习资料

    Ⅰ.mysql 1.mysql小基础 (1)数据类型 类型 备注 tinyint/smallint/mediumint/int/bigint 1B/2B/3B/4B/8B float/double 单 ...

  8. “Location of the Android SDK has not been set up in the preferences”问题的解决

    方法来源:http://stackoverflow.com/questions/5894929/location-of-the-Android-sdk-has-not-been-setup-in-th ...

  9. Django升级1.8的一些问题

    1.最明显的问题当然是Settings设置中关于模板的设置数据结构发生变化,这个就不细说了,你开个Django的1.8的新项目就知道怎么改了 2.migrations问题,这个问题是1.8最主要的修改 ...

  10. python3.6 安装win32api时候找不到regitry的问题

    首先下载 https://sourceforge.net/projects/pywin32/files/pywin32/ 找到对应的即可 我需要的是这个 打开之后会提示3.6未注册 在任意位置新建一个 ...