从NServiceBus版本8开始,不再支持NServiceBus主机。请参阅主机升级指南了解更多细节和备选方案。
NServiceBus主机采用自以为是的托管方法。使用NServiceBus主机的端点可以作为Windows服务或控制台应用程序运行(例如在开发期间)。
要使用主机,请创建一个新的C#类库并引用NServiceBus。主机NuGet包.
主机版本
5.0之前的主机版本与NServiceBus核心一致。自NServiceBus版本6起。托管独立维护和发布的版本,版本号在NServiceBus之间不匹配。主机和NServiceBus核心。此表显示了NServiceBus。主机版本和NServiceBus核心的相应版本。
NServiceBus。主机 | NServiceBus服务总线 |
---|
8.倍 | 7.倍 |
7.倍 | 6.x |
6.倍 | 5.倍 |
5.倍 | 5.倍 |
4.x个 | 4.x个 |
3.x个 | 3.x个 |
2.x个 | 2.x个 |
应用程序域
这个NServiceBus。主持人。可执行文件
创建一个单独的服务 应用程序域运行NServiceBus和用户代码。新域被分配一个以包含类实现的dll命名的配置文件I配置此端点
。所有配置都应该在该文件中完成(与NServiceBus。主持人。exe执行。配置
). 在大多数情况下,这意味着只需添加应用程序。配置
文件,并让MSBuild在移动到箱子
目录。
当实现的类型I配置此端点
未通过端点配置类型
中的应用程序设置键NServiceBus。主持人。执行。配置
,主机扫描所有程序集以查找此类型。扫描是在主办应用程序域,而不是新的服务域。因此,当重定向程序集版本,的程序集绑定
元素需要同时存在于NServiceBus。主持人。执行。配置
和应用程序。配置
。另请参阅程序集扫描.
端点配置
组件扫描
默认情况下,装配扫描过程NServiceBus主机与常规端点的相同。启动时,主机扫描运行时目录以查找包含给定端点配置的程序集,即实现I配置此端点
接口。
如果明确指定了包含端点配置的类,则可以避免扫描过程:
<配置><appSettings><add key=“EndpointConfigurationType”value=“YourNamespace.YourTypeName,YourAssembly”/></appSettings></配置>
或者,可以控制应扫描哪些程序集。这可以通过在代码中实现I配置此端点
接口:
公共类EndpointConfig:I配置此端点{公共void自定义(EndpointConfiguration EndpointConfiguration){//使用“endpointConfiguration”对象配置扫描}}
或在安装过程中通过将值传递给/扫描的程序集:
参数.
初始化
对于版本5和更高版本,使用I配置此端点。自定义
方法。对传递给方法的参数调用适当的方法。
类CustomizingHost:I配置此端点{公共void自定义(EndpointConfiguration EndpointConfiguration){//要进行自定义,请使用配置参数。端点配置。使用持久性<InMemoryPersistence>();}}
以下代码段显示了一个可以用作起点的示例配置。
使用NServiceBus;公共类EndpointConfig:IConfigureThisEndpoint{公共void自定义(EndpointConfiguration EndpointConfiguration){//TODO:NServiceBus提供了多种持久存储选项,包括SQL Server、RavenDB和Azure表持久性。//有关特定选项的更多详细信息,请参阅文档。端点配置。使用持久性<学习持久性>();//NServiceBus将重复失败的消息移动到单独的“错误”队列。建议使用//从所有端点的共享错误队列开始,以便于与ServiceControl集成。端点配置。发送失败消息到(“错误”);//NServiceBus将在单独的“审计”队列中存储每个成功处理消息的副本。建议使用//从所有端点的共享审核队列开始,以便于与ServiceControl集成。端点配置。AuditProcessedMessagesTo(“审计”);}}
将主机设置为启动项目
将启动项目设置为NServiceBus。主持人。可执行文件
(在生成的输出目录中可用)或创建启动设置。杰森
包含以下内容
{“配置文件”:{“主机_8”:{“commandName”:“可执行文件”,“executablePath”:“.\\NServiceBus.Host.exe”}}}
端点名称
通过命名空间约定
使用NServiceBus时。主机,实现类的命名空间I配置此端点
将用作端点名称作为默认约定。在以下示例中,运行时的端点名称NServiceBus。主持人。可执行文件
成为我的服务器
。这是推荐的端点命名方法。此外,这强调约定胜于配置方法。
命名空间MyServer{使用NServiceBus;#杂注警告禁用618公共类EndpointConfigByNamespace:I配置此端点{// ... 自定义配置
在代码中定义
使用定义端点名称(名称)
端点配置的扩展方法。
公共void自定义(EndpointConfiguration EndpointConfiguration){端点配置。定义端点名称(“自定义端点名称”);}
通过端点名称
属性
使用[端点名称]
属性。
[端点名称(“MyEndpointName”)]公共类EndpointConfigWithAttribute:I配置此端点{// ... 自定义配置
默认严重错误操作
默认值严重错误操作对于主机:
if(环境.UserInteractive){//这样用户可以在屏幕上看到问题线程。睡眠(10000);}var fatalMessage=$“NServiceBus关键错误:\n{errorMessage}\nShutting down。”;环境。FailFast(致命消息,异常);
如果在退出进程之前应该执行一些自定义代码,例如持久化内存中的一些数据、刷新记录器等,则应覆盖默认回调。请参阅关键错误文章了解更多信息。
角色-内置配置
在版本5及以上版本中,角色已被废弃,不应使用。的功能作为服务器(_S)
、和作为A_Publisher
已在核心中设置默认值,可以安全删除。如果作为客户端(_C)
仍然需要功能添加以下配置。
var endpointConfiguration=新端点配置(“MyEndpointName”);端点配置。启动时清除(true);var transport=endpointConfiguration。使用传输<MsmqTransport>();运输。事务(TransportTransactionMode.None);var可恢复性=endpointConfiguration。可恢复性();可恢复性。已延迟(自定义:设置=>{设置。重试次数(0);});端点配置。DisableFeature<超时管理器>();
端点实例启动和停止时
插入启动/关闭序列的类在端点实例启动后和停止前被调用。这种方法可以用于需要以与端点实例相同的生命周期执行的任何任务。
公共类引导程序:IWantToRunWhenEndpoint开始和停止{公共任务启动(IMessageSession会话){//在此处执行启动操作。//将Start方法标记为async或执行以下操作return任务。已完成任务;}公共任务停止(IMessageSession会话){//在此处执行清理操作。//将Stop方法标记为async或执行以下操作return任务。已完成任务;}}
支持TLS 1.2及更高版本
NServiceBus。主机是根据编译的。NET框架4.5.2。这个传输层安全(TLS)最佳实践微软表示,应用程序不应硬编码TLS版本,而应让操作系统选择合理的默认值。不幸的是,正在被编译。NET 4.5.2意味着将使用TLS 1.1,而不是TLS 1.2或1.3。要在主机上启用TLS 1.2或更高版本的兼容性,请将以下运行时配置添加到NServiceBus。主机.exe配置:
<?xml version=“1.0”encoding=“utf-8”?><配置><运行时><AppContextSwitchOverrides value=“Switch.System.Net.DontEnableSystemDefaultTlsVersions=false”/></运行时></配置>