nservicebus unobtrusive模式没有提取处理程序或处理消息

时间:2015-09-01 18:29:23

标签: nservicebus

我试图通过定义自定义约定,使用非显眼模式使用Nservicebus组合原型。我开始尝试在NServicebus主机中运行我的终端,但没有运气,因为它收到了我发布的消息。我从Nservicebus获取了Unobtrusive示例应用程序,并用我的消息和处理程序替换了它的内容。它似乎根据约定检测消息(我在应用程序运行时在控制台输出中看到它),但似乎没有根据我在Server应用程序中的处理程序注册这些消息。我没有看到消息被放入队列中,并且在应用程序运行时我无法在服务脉冲中看到活动或非活动端点。

我尝试了很多不同的“修复程序”,并且已经搜索了互联网,堆栈溢出和Nservicebus文档,并且没有找到任何信息指出我正确的方向。

这是我的服务器端点配置:

    BusConfiguration busConfiguration = new BusConfiguration();

busConfiguration.EnableInstallers();
busConfiguration.UsePersistence<InMemoryPersistence>();
busConfiguration.UseDataBus<FileShareDataBus>()
    .BasePath(@"..\..\..\DataBusShare\");
busConfiguration.RijndaelEncryptionService();

busConfiguration.ApplyCustomConventions();

using (IBus bus = Bus.Create(busConfiguration).Start())
{
  Console.WriteLine("Press any key to exit.");
  Console.ReadKey();
}

public static void ApplyCustomConventions(this BusConfiguration busConfiguration)  
{

ConventionsBuilder conventions = busConfiguration.Conventions();
conventions.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Commands"));
conventions.DefiningEventsAs(t => t.Namespace != null && t.Namespace.EndsWith("Events"));
conventions.DefiningMessagesAs(t => t.Namespace != null && t.Namespace == "Messages");
conventions.DefiningEncryptedPropertiesAs(p => p.Name.StartsWith("Encrypted"));
//conventions.DefiningDataBusPropertiesAs(p => p.Name.EndsWith("DataBus"));
conventions.DefiningExpressMessagesAs(t => t.Name.EndsWith("Express"));
conventions
  .DefiningTimeToBeReceivedAs(t => t.Name.EndsWith("Expires")
      ? TimeSpan.FromSeconds(30)
      : TimeSpan.MaxValue
  );
}

ApplyCustomConventions方法在我的消息发布者和服务器端点之间共享。

这是我的服务器端点.exe app.config:

<configuration>
  <configSections>
    <section name="RijndaelEncryptionServiceConfig" type="NServiceBus.Config.RijndaelEncryptionServiceConfig, NServiceBus.Core"/>
  </configSections>
  <RijndaelEncryptionServiceConfig Key="gdDbqRpqdRbTs3mhdZh8qCaDaxJXl+e7"/>
</configuration>

发布时没有错误,并且永远不会收到消息。

更新:当我尝试发布事件时,我已将其缩小到不工作,除非我进行端点映射,否则端点不会订阅。此外,即使在我发布了具有端点映射的事件之后,我的端点处理程序仍然无法接收它。

我在这里有一个问题。在来自特殊的不引人注意的示例中,它没有设置任何端点映射以便能够发送命令和消息,它根据程序集名称设置端点。这不适用于事件和发布吗?我拿了一个不引人注意的例子,在Messages.dll中放了一个事件消息,并在Server.exe中为该事件添加了一个处理程序,并更改了Client.exe以便能够发布该事件,但它不起作用。 当我有机会时,我会尝试在某个地方发布我的代码。谢谢你们。

3 个答案:

答案 0 :(得分:1)

在以不显眼模式运行端点时,请确保您在发送方和接收方中都进行了定义。

另外,请在此处发布一些端点配置代码,这可能有助于排除故障。

在接收端点进行发送时是否会出现任何错误?大多数情况下抛出某种类型的错误可以帮助排除故障。

答案 1 :(得分:0)

我注意到你的app.config中没有定义端点映射。在“前端”和“后端”项目中都需要将消息路由到正确的位置。以下是我的名为“myapplication”的应用程序的片段:

<UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="myapplication.Commands" Endpoint="myapplication.Backend" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

有关此内容的更多信息,请访问:http://docs.particular.net/nservicebus/messaging/specify-message-destination

答案 2 :(得分:0)

两个端点都需要不显眼的映射。订户端点应配置为订阅消息。请参阅此处了解如何配置订户:

http://docs.particular.net/nservicebus/messaging/publish-subscribe/configuration

对于您的订阅者,App.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
  </configSections>
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Assembly="Shared" Endpoint="Samples.PubSub.MyPublisher"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>
</configuration>