为什么 MassTransit 消息传递中不允许使用结构体?

2024-02-19

消费者界面在MassTransit所有人都期望消息模型是类而不是结构。由于它们都是内部接口(我必须说那里的设计非常好),这是显示约束的通用容器类,直接获取从源代码来看 https://github.com/MassTransit/MassTransit/blob/v2.8.0/src/MassTransit/Consumes.cs:

/// <summary>
/// Declares a Consume method for the message type TMessage which is called
/// whenever a a message is received of the specified type.
/// </summary>
public static class Consumes<TMessage> where TMessage : class

对于刚开始使用该技术的人来说这不是问题,但对我们来说却很麻烦,因为在考虑使用服务总线框架之前,我们的代码库中已经有了与命令模式相关的对象,因此我们必须更改了相当多的接口和通用类来添加约束,使它们能够与 MT 一起使用。

我们很幸运没有明确地有任何struct但是,因为这可能会导致更多(可能是不需要的)更改。

为什么要求消息类别是class?是否可以改变这一点,以便该库与现有代码更无缝地交互?我认为这个约束并不是无缘无故添加的,所以可能会出现一些复杂的情况。


实际上,所有消息契约都应该是接口。抽象应该从任何逻辑中删除,接口将强制执行这一点。您还可以以有趣的方式组合传递,因为 MT 将传递到继承/实现层次结构中的所有匹配路由。

但无论我们建议对消息做什么,事实证明值类型不会按照我们使用它们的方式工作。我们严重依赖类型信息,并且我们可以为交付给您的消费者的类型创建代理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 MassTransit 消息传递中不允许使用结构体? 的相关文章

  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • .NET 程序集差异/比较工具 - 有什么可用? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在两个程序集之间进行代码级差异 Reflector 的 Diff 插件是迄今为止我发现的最接
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • 为什么在这种情况下接口合并不起作用?

    我正在 Visual Studio Code 中编写一些 WebGL 代码 类型声明来自 npm 包 types webgl2 而 typescript 似乎没有合并以下接口 interface WebGL2RenderingContext
  • Angular 2 模板引用变量与 *ngFor [重复]

    这个问题在这里已经有答案了 我有两个组成部分 列表和详细信息 In 列表组件我想渲染多个细节组件 列表组件 ts Component selector detail templateUrl detail component html exp
  • 如何在 XAMPP 上使用 Codeigniter 删除 index.php?

    我无法在 XAMPP 1 7 3 上隐藏 Codeigniter index php URL http localhost Servidor agentesRainbow index php agentes tony tony是一个论点 将
  • 编辑输入 type="search" 伪元素按钮 ('x')

    我正在尝试制作一个看起来不错的搜索栏 我所做的是 我制作了一个搜索栏的图像 并将该图像添加到输入的背景中 然后编辑字体将出现的位置和大小 我唯一找不到编辑的方法是使用输入类型搜索时出现的小 x 按钮 我想将其向左移动一点 这样它就能修复我的
  • 如何在Android中实现拖动幻灯片视图

    我需要能够将列表视图拖动到左侧并移出视图 同时暴露第一个列表视图下方的另一个列表视图 我该怎么做呢 您可以使用 OnTouchListener 并在 ACTION MOVE 上调整大小或移动某些视图 请记住调用 setClickable t
  • Android USB 主机 API 和 USB 存储

    我正在尝试使用 android 主机 api 进行 USB 存储 我对此有很多疑问 使用主机 API 一切皆有可能 我想查看 USB 的内容 如果可能的话 查看正常的文件操作 我没有找到任何与此相关的文档帮助 我可以使用 UsbDevice
  • Wix 的 util:CloseApplication 扩展似乎不起作用

    我试图在使用 Wix 卸载之前关闭一个进程 我已经确认 只要存在可见窗口 它就可以工作 但如果没有可见窗口 此应用程序大多数情况下都是这种情况 因为它是系统托盘应用程序 卸载程序就会挂起 并且最终继续卸载 使进程保持运行 根据这个论坛帖子
  • 下载 HTML 页面及其内容

    Does Python有什么方法可以下载整个HTML页面及其内容 图像 CSS 到给定 url 的本地文件夹 并更新本地 html 文件以在本地选择内容 您可以使用urllib http docs python org library ur
  • 在 Visual Studio Code 中将语言更改为 JSX

    立即使用 Visual Studio 代码在0 8版本上支持JSX https code visualstudio com Updates languages jsx colorization 但看起来激活它的唯一方法是使用 jsx文件扩展
  • 为什么不推荐react-router v6中的HashRouter?

    在每一个react routerv6 文档页面提到HashRouter有一个简短的警告文本指出不建议使用这种路由 没有解释为什么 有没有major缺点 它会以某种方式破坏任何 api 吗 简短的回答 一些开发人员认为哈希路由会产生 丑陋 的
  • 向skimage中的regionprops添加额外的属性

    我正在使用regionprops函数从scikit image or skimage 包使用同一包中的 SLIC 超像素算法来计算分割图像的区域特征 除了函数中计算的特征之外 我还需要其他特征 主要是 标准差 偏度 峰度 我修改了源代码 r
  • 在头文件中初始化可定制结构的向量

    有没有办法获得全局结构列表并在同一头文件中初始化包含它们的修改版本的向量 我知道我无法直接访问和编辑 h 文件中的变量 因为它不是运行时代码 但也许恰好有一个解决方法 或者可能是我碰巧跳过的一些非常基本的方法C 初学者手册 如果是的话请原谅
  • Android 在 webview 中启用后退按钮

    我正在使用以下代码在我的 Android 应用程序中显示 Web 视图 package com company myapp import com google android apps analytics GoogleAnalyticsTr
  • 许可方案、防欺骗和撤销功能

    这是我的第一个问题 所以请温柔一点 我正在开发一个软件 我想使用某种许可方案来保护该软件 一个基本方案是为用户生成一些 唯一 密钥 用户在想要注册该软件时发送该密钥和注册码并收到激活码 当应用程序运行时 它通过比较 唯一 密钥和通过解密激活
  • 从独立存储中的图像设置辅助平铺背景图像

    这是我从图像网址获取流的方法 using var httpClient new HttpClient response await httpClient GetStreamAsync new Uri IMAGEURL HERE UriKin
  • 在 T-SQL 中将特定 BigInt 转换为 DateTime

    我有 bigInt 635307578922100000我需要转换成DateTime 我尝试了几种方法来做到这一点 SELECT DATEADD S CONVERT bigint 635307578922100000 1000 CONVER
  • SPSite 站点 = new SPSite(SPContext.Current.Web.Url) 与 SPContext.Current.Web.Site

    为什么某些 SharePoint 示例使用 using SPSite site new SPSite SPContext Current Web Url 而不仅仅是简单地 SPSite site SPContext Current Web
  • 如何使用DELPHI更改Android设备通知中的小图标图像

    有没有办法用Delphi更改Android应用程序通知中的小图标图像 默认使用的应用程序图标 轻松创建通知的标准方法是 var aNotification TNotification begin aNotification aNotific
  • 在C++中查找进程中加载​​的DLL的内存地址

    我有一个正在使用 Test dll 的正在运行的进程 我想知道内存中 Test dll 开始的确切内存位置 但似乎无法 我的主要问题是我需要写入此 DLL 的偏移量 但当我使用 Read WriteProcessMemory 时 我无法准确
  • 为什么 MassTransit 消息传递中不允许使用结构体?

    消费者界面在MassTransit所有人都期望消息模型是类而不是结构 由于它们都是内部接口 我必须说那里的设计非常好 这是显示约束的通用容器类 直接获取从源代码来看 https github com MassTransit MassTran