在创建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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
系统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; }
}
Run Code Online (Sandbox Code Playgroud)
在MessageEndpointMappings中,您需要按如下方式更新它:
Run Code Online (Sandbox Code Playgroud)<add Messages="Messages" Endpoint="SystemB" />
NServiceBus 3根据主机程序集的命名空间自动创建队列名称.
此外,您可能希望使用NServiceBus.Host来托管处理程序而不是您自己的控制台应用程序.
| 归档时间: |
|
| 查看次数: |
2594 次 |
| 最近记录: |