C# 仅在NServiceBus中发送

C# 仅在NServiceBus中发送,c#,nservicebus,C#,Nservicebus,创建NServiceBus SendOnly端点时,其目的是触发并忘记,即只发送一条消息,然后其他人会处理它。这似乎是我需要的东西。我不希望总线和处理消息的系统之间有任何通信。系统“A”想要通知系统“B”一些事情 如果创建SendOnly端点非常简单,那么系统监听来自SendOnly端点的消息又如何呢 我正在尝试在命令行项目中设置一个侦听器来处理消息。消息被发送到队列,但它们不被系统“B”处理 这是错误的方法吗?这类功能是否存在总线过量 系统A: public class Program {

创建NServiceBus SendOnly端点时,其目的是触发并忘记,即只发送一条消息,然后其他人会处理它。这似乎是我需要的东西。我不希望总线和处理消息的系统之间有任何通信。系统“A”想要通知系统“B”一些事情

如果创建SendOnly端点非常简单,那么系统监听来自SendOnly端点的消息又如何呢

我正在尝试在命令行项目中设置一个侦听器来处理消息。消息被发送到队列,但它们不被系统“B”处理

这是错误的方法吗?这类功能是否存在总线过量

系统A:

public class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();

        var bus = Configure.With()
            .UnityBuilder(container)
            .JsonSerializer()
            .Log4Net()
            .MsmqTransport()
            .UnicastBus()
            .SendOnly();

        while(true)
        {
            Console.WriteLine("Send a message");
            var message = new Message(Console.ReadLine());
            bus.Send(message);
        }
    }
}
系统B:

class Program
{
    static void Main(string[] args)
    {
        var container = new UnityContainer();

        var bus = Configure.With()
            .UnityBuilder(container)
            .JsonSerializer()
            .Log4Net()
            .MsmqTransport()
            .UnicastBus()
            .LoadMessageHandlers()
            .CreateBus()
            .Start();

        Console.WriteLine("Waiting for messages...");

        while(true)
        {

        }
    }
}

public class MessageHandler : IHandleMessages<Message>
{
    public void Handle(Message message)
    {
        Console.WriteLine(message.Data);
    }
}

public class Message : IMessage
{
    public Message()
    {

    }

    public Message(string data)
    {
        Data = data;
    }

    public string Data { get; set; }
} 
类程序
{
静态void Main(字符串[]参数)
{
var container=new UnityContainer();
var bus=Configure.With()
.UnityBuilder(集装箱)
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();
Console.WriteLine(“等待消息…”);
while(true)
{
}
}
}
公共类MessageHandler:IHandleMessages
{
公共无效句柄(消息)
{
Console.WriteLine(message.Data);
}
}
公共类消息:IMessage
{
公共信息()
{
}
公共消息(字符串数据)
{
数据=数据;
}
公共字符串数据{get;set;}
} 

在MessageEndpointMappings中,您需要按如下方式更新它:

  • 将DLL替换为包含消息的程序集的名称(例如“消息”)
  • 将端点更改为系统B正在读取的队列的名称(您可以通过查看专用队列下的MSMQ管理单元来检查队列名称)

  • 来承载您的处理程序而不是您自己的控制台应用程序。

    您是否已在发件人的app.config中添加了MessageEndpointMappings?另外,您使用的是哪个版本的NServiceBus?抱歉,忘记了我使用的.configs NServiceBus 3.0.3谢谢,我认为SystemB上的消息端点应该与SystemA使用的队列相同…但显然不是:-)
    <add Messages="Messages" Endpoint="SystemB" />