NServiceBus可以将同一应用程序同时作为发布者/订阅者吗?

丹尼·范德·克兰

我是消息体系结构的新手,所以我可能走错了路。但是我想通过解决一个小问题将NServiceBus慢慢引入团队。

议程中的任命有州。在同一应用程序中,两个用户可能正在同一议程中查看同一约会。他们通过中央服务器上的远程会话启动此应用程序。因此,如果用户1更新约会的状态,我希望用户2查看新状态“实时”。

为了对此进行模拟或进行概念验证,我制作了一个新的控制台应用程序。通过NuGet,我同时获得了NServiceBus和NServiceBus.Host,因为从文档中了解到,我需要两者。而且我知道在生产代码中不建议将所有内容都放在同一程序集中,但是发布者和订阅者很可能最终会在同一程序集中...

在类Program方法Main中,我编写了以下代码:

BusConfiguration configuration = new BusConfiguration();

configuration.UsePersistence<InMemoryPersistence>();
configuration.UseSerialization<XmlSerializer>();
configuration.UseTransport<MsmqTransport>();
configuration.TimeToWaitBeforeTriggeringCriticalErrorOnTimeoutOutages(new TimeSpan(1, 0, 0));
ConventionsBuilder conventions = configuration.Conventions();
conventions.DefiningEventsAs(t => t.Namespace != null
    && t.Namespace.Contains("Events"));

using (IStartableBus bus = Bus.Create(configuration))
{
    bus.Start();

    Console.WriteLine("Press key");
    Console.ReadKey();

    bus.Publish<Events.AppointmentStateChanged>(a =>
    {
        a.AppointmentID = 1;
        a.NewState = "New state";
    });

    Console.WriteLine("Event published.");
    Console.ReadKey();
}

在类EndPointConfig方法Customize中,我添加了:

configuration.UsePersistence<InMemoryPersistence>();
configuration.UseSerialization<XmlSerializer>();
configuration.UseTransport<MsmqTransport>();
ConventionsBuilder conventions = configuration.Conventions();
conventions.DefiningEventsAs(t => t.Namespace != null
    && t.Namespace.Contains("Events"));

AppointmentStateChanged是Events文件夹中的一个简单类,如下所示:

public class AppointmentStateChanged: IEvent {
    public int AppointmentID { get; set; }
    public string NewState { get; set; }
}

AppointmentStateChangedHandler是事件处理程序:

public class AppointmentStateChangedHandler : IHandleMessages<Events.AppointmentStateChanged> {
public void Handle(Events.AppointmentStateChanged message) {
        Console.WriteLine("AppointmentID: {0}, changed to state: {1}", 
            message.AppointmentID, 
            message.NewState);
    }
}

如果我启动一个控制台应用程序,则一切正常。我看到处理程序处理该事件。但是,如果我尝试启动第二个控制台应用程序,则它将崩溃:System.Messaging.MessageQueueException(所请求操作的超时已过期)。所以我一定在做错事,并且让我再次猜测我不理解更高层次的东西。有人能指出我正确的方向吗?

Update Everthing位于AgendaUpdates命名空间中,但事件类位于AgendaUpdates.Events命名空间中。

更新2采取的步骤:

  • 复制的AgendaUpdates解决方案(到AgendaUpdates2文件夹)
  • 在副本中,我将App.Config中的MessageEndpointMappings更改为Endpoint属性为“ AgendaUpdates2”,但出现了MSMQ异常:“队列不存在,或者您没有足够的权限执行该操作”
  • 在副本中,我将以下代码行添加到EndPointConfig中:configuration.EndpointName(“ AgendaUpdates2”); 我收到MSMQ异常:“队列不存在,或者您没有足够的权限执行该操作”
  • 在副本中,我将以下代码行添加到Program类的Main方法中:configuration.EndpointName(“ AgendaUpdates2”); 按下键后再次获得原始异常。

->我通过使用原始和复制的解决方案启动2个Visual Studio进行了测试。然后在IDE中启动两个控制台应用程序。

丹尼斯·范德·斯特尔特

如果您希望发布者也成为消息的接收者,则需要在配置中指定此消息。

这是在清楚地解释这个文章,其中解决您的问题完全是在文章的末尾。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以将同一应用程序的多个版本提交到Apple Store吗?

来自分类Dev

可以在IIS中托管NServiceBus发布者吗?

来自分类Dev

可以在IIS中托管NServiceBus发布者吗?

来自分类Dev

当发布者和处理者是同一对象时,我应该取消订阅事件吗?

来自分类Dev

应用程序显示为“Microsoft 帐户”作为发布者,但未通过 powershell 显示

来自分类Dev

使用$ .deferred作为发布者/订阅者?

来自分类Dev

从同一应用程序中调用内容提供者的权限被拒绝

来自分类Dev

为什么我的签字,点击一次应用程序说它未知发布者

来自分类Dev

是否可以在同一应用程序中同时设置Crashlytics和Flurry崩溃分析?

来自分类Dev

同一应用程序的不同子域可以阻止XSS之类的恶意攻击吗?

来自分类Dev

可可:我可以防止重复启动同一应用程序吗?

来自分类Dev

Liquibase可以处理由同一应用程序管理的多个模式吗?

来自分类Dev

Liquibase可以处理由同一应用程序管理的多个模式吗?

来自分类Dev

ros python发布者/订阅者

来自分类Dev

Firebase:将同一应用程序部署到多个Firebase项目

来自分类Dev

.net core 2.2和3.1应用程序插槽可以共存于同一应用程序服务中吗?

来自分类Dev

Redis发布/订阅-发布者也是订阅者?

来自分类Dev

是否可以在同一应用程序中同时使用NancyFx模块和WebAPI控制器?

来自分类Dev

ZeroMQ:订阅者可以发布吗?

来自分类Dev

Windows报告已签名应用程序的“未知发布者”

来自分类Dev

在Windows中更改VB应用程序的进程名称和发布者名称

来自分类Dev

未知的发布者-如何告诉UAC该程序还可以吗?

来自分类Dev

发布者等待消费消息,同时它应该做两件事(发布和订阅订阅者的回复)。)

来自分类Dev

Raspberry Pi 作为 MQTT 代理以及订阅者或发布者

来自分类Dev

订户可以根据发布者选择消息吗?

来自分类Dev

在同一应用程序中同时包含crashlytics和Google Analytics(分析)

来自分类Dev

如何在git中同时使用同一应用程序的多个版本?

来自分类Dev

DirectProcessor 和 UnicastProcessor 可以在不应该订阅上游发布者时订阅。为什么?

来自分类Dev

是否可以对NServiceBus中的事件发布者进行范围/分组?

Related 相关文章

  1. 1

    我可以将同一应用程序的多个版本提交到Apple Store吗?

  2. 2

    可以在IIS中托管NServiceBus发布者吗?

  3. 3

    可以在IIS中托管NServiceBus发布者吗?

  4. 4

    当发布者和处理者是同一对象时,我应该取消订阅事件吗?

  5. 5

    应用程序显示为“Microsoft 帐户”作为发布者,但未通过 powershell 显示

  6. 6

    使用$ .deferred作为发布者/订阅者?

  7. 7

    从同一应用程序中调用内容提供者的权限被拒绝

  8. 8

    为什么我的签字,点击一次应用程序说它未知发布者

  9. 9

    是否可以在同一应用程序中同时设置Crashlytics和Flurry崩溃分析?

  10. 10

    同一应用程序的不同子域可以阻止XSS之类的恶意攻击吗?

  11. 11

    可可:我可以防止重复启动同一应用程序吗?

  12. 12

    Liquibase可以处理由同一应用程序管理的多个模式吗?

  13. 13

    Liquibase可以处理由同一应用程序管理的多个模式吗?

  14. 14

    ros python发布者/订阅者

  15. 15

    Firebase:将同一应用程序部署到多个Firebase项目

  16. 16

    .net core 2.2和3.1应用程序插槽可以共存于同一应用程序服务中吗?

  17. 17

    Redis发布/订阅-发布者也是订阅者?

  18. 18

    是否可以在同一应用程序中同时使用NancyFx模块和WebAPI控制器?

  19. 19

    ZeroMQ:订阅者可以发布吗?

  20. 20

    Windows报告已签名应用程序的“未知发布者”

  21. 21

    在Windows中更改VB应用程序的进程名称和发布者名称

  22. 22

    未知的发布者-如何告诉UAC该程序还可以吗?

  23. 23

    发布者等待消费消息,同时它应该做两件事(发布和订阅订阅者的回复)。)

  24. 24

    Raspberry Pi 作为 MQTT 代理以及订阅者或发布者

  25. 25

    订户可以根据发布者选择消息吗?

  26. 26

    在同一应用程序中同时包含crashlytics和Google Analytics(分析)

  27. 27

    如何在git中同时使用同一应用程序的多个版本?

  28. 28

    DirectProcessor 和 UnicastProcessor 可以在不应该订阅上游发布者时订阅。为什么?

  29. 29

    是否可以对NServiceBus中的事件发布者进行范围/分组?

热门标签

归档