入门
建筑
NServiceBus服务总线
坚持不懈
服务洞察力
服务脉冲
服务控制
监测
样品

MSMQ传输配置

组件:MSMQ传输
NuGet套餐: NServiceBus。运输。Msmq公司(2.x)
目标版本:NServiceBus 8.x服务总线

接收算法

由于MSMQ API的设计方式,接收算法比其他轮询驱动的传输(例如SQL服务器).

主循环使用获取消息枚举器2迭代队列中的所有可用消息,并为每条消息创建单独的接收任务。

禁用安装程序

NuGet包包含两个PowerShell脚本,以帮助简化端点的队列创建和清理。通过调用EnableInstaller配置API。每次端点启动时都会运行创建队列的代码。

为了避免在端点上启用安装程序时创建队列(使用端点配置。启用安装程序()),将此传输配置API调用为显式创建队列:

var传输=新的MsmqTransport{CreateQueues=假};端点配置。使用运输(运输);

禁用DeadLetterQueuing

全球的

将邮件转发到死信队列(DLQ)作为安全机制默认为ON。DLQ设置可防止由于配置错误或无法将消息传递到目标队列的任何其他原因而导致消息丢失。

调用此API以禁用在DLQ中存储无法传递的消息。只有在消息丢失是可接受的情况下才能使用此设置。写入DLQ会增加性能开销。在高容量情况下,可以将其关闭。在这样做时,必须确保路由配置准确,否则会导致消息丢失。

var传输=新的MsmqTransport{UseDeadLetterQueue=false};端点配置。使用运输(运输);

每条消息:(需要1.1以上版本)

可以通过发送、发布或回复选项覆盖特定消息的全局死信队列行为。

启用:

var options=新的SendOptions();选项。UseDeadLetterQueue();

禁用:

var options=新的SendOptions();选项。UseDeadLetterQueue(启用:false);

禁用发送连接缓存

默认情况下,缓存设置为true,并指示MSMQ缓存到远程队列的连接,并根据需要重新使用它们,而不是为每条消息创建新连接。此API允许关闭连接缓存。但是,在大多数情况下,这样做会对消息吞吐量产生负面影响。

var传输=新的MsmqTransport{UseConnectionCache=false};端点配置。使用运输(运输);

使用非事务队列

虽然使用非事务性队列可能会提高性能,但应仔细权衡消息丢失的可能性。

var传输=新的MsmqTransport{UseTransactionalQueues=false};端点配置。使用运输(运输);

启用日志记录

全球的

此API支持使用日志消息。使用此选项,MSMQ将在日志队列.

var传输=新的MsmqTransport{UseJournalQueue=true};端点配置。使用运输(运输);

每条消息:(需要1.1以上版本)

可以通过发送、发布或回复选项覆盖特定消息的全局日志行为。

启用:

var options=新的SendOptions();选项。使用日志队列();

禁用:

var options=新的SendOptions();选项。UseJournalQueue(启用:false);

到达队列的时间

覆盖到达时间队列(TTRQ)时间跨度。默认值为Message。InfiniteTimeout(无限超时)。

TTRQ是消息到达目标队列的时间限制,从消息发送时开始计算。这将设置基础消息。到达队列的时间.

var传输=新的MsmqTransport{TimeToReachQueue=时间跨度。从分钟(15)};端点配置。使用运输(运输);

MSMQ标签

通常在使用调试MSMQ时本机工具,在MSMQ标签中有一些自定义文本很有帮助。例如消息类型或消息id。从版本6开始,用于应用于的文本消息。标签可以在配置时使用将标签应用于消息扩展方法。此方法接受一个委托,该委托将传递给标头集合,并应返回一个字符串用于标签。它将被调用用于所有标准消息以及审计、错误和所有控制消息。此规则的唯一例外是收到的邮件头已损坏。在某些情况下,使用标题。控制消息标题键确定消息是否为控制消息。这些消息将被转发到错误队列,但不应用标签。返回的字符串可以是字符串。清空表示没有标签,并且最多只能包含240个字符。

var传输=新的MsmqTransport{//将msmq消息标签设置为当前消息IdApplyCustomLabelToOutgoingMessages=headers=>headers[headers.MessageId]};端点配置。使用运输(运输);

交易和交付担保

MSMQ传输支持以下功能运输交易模式:

  • 事务范围(分布式事务)
  • 传输事务-使用接收发送原子
  • 传输事务-仅接收
  • 不可靠(事务已禁用)

另请参见控制事务范围选项.

交易范围(分布式交易)

在此模式下,在接收消息之前启动环境事务。该事务包括处理的所有阶段,包括用户数据访问和传奇数据访问。

MSMQ不支持快照隔离级别。快照隔离级别仅适用于需要持久性的情况。如果传输和持久性不共享同一事务,则只能在持久化器上应用此隔离级别。将传输事务模式降低到至少使用接收发送原子,使用事务范围中的包装处理程序,然后通过隔离级别。快照作为参数。这存在一致性问题,如传输事务一致性保证文章

本地事务

在1.0及更高版本中,MSMQ传输使用本机事务来支持仅接收发送原子并接收水平。使用发送带有接收的电子邮件用于接收消息的本机事务与发送操作共享。这意味着消息接收操作以及任何发送或发布操作都是原子提交的。使用时仅接收,事务不会与发送操作共享,并且在接收事务需要中止时,可能不会回滚已调度的消息。

不可靠(事务已禁用)

在这种模式下,当收到消息时,它会立即从输入队列中删除。如果处理失败,消息将丢失,因为操作无法回滚。处理消息时执行的任何其他操作都是在没有事务的情况下执行的,并且无法回滚。当消息处理部分失败时,这可能会导致意外的副作用。

相关文章