gpt4 book ai didi

c# - 无法让自己的主机在 NServiceBus 上工作

转载 作者:太空狗 更新时间:2023-10-29 21:15:12 26 4
gpt4 key购买 nike

使用版本 2.0.0.1219

我正在尝试使用 NServiceBus 和 VS2010 自行托管订阅者和发布者。程序运行并初始化,但我无法让消息移动。发布者就像在发布一样,没有错误,但订阅者什么也没收到。

这是订阅者配置

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
</configSections>

<!-- in order to configure remote endpoints use the format: "queue@machine"
input queue must be on the same machine as the process feeding off of it.
error queue can (and often should) be on a different machine.
-->

<MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>

<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="NServiceMessage" Endpoint="loads"/>
</MessageEndpointMappings>
</UnicastBusConfig>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

和发布者配置

<?xml version="1.0"?>
<configuration>

<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
</configSections>

<MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>

<UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<!-- publishers don't need to set this for their own message types -->
<!--<add Messages="Messages" Endpoint="messagebus" />-->
</MessageEndpointMappings>
</UnicastBusConfig>

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

</configuration>

这是发布者代码:

    class Program
{
private static IBus _serviceBus;

static void Main(string[] args)
{
_serviceBus = Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqSubscriptionStorage()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();

while (true)
{
Console.WriteLine("Press a key to send data.");
Console.ReadKey();
SendMessaage();
}
}


private static void SendMessaage()
{
LoadMessage message = GetNextMessage();
_serviceBus.Publish(message);
}

private static LoadMessage GetNextMessage()
{
LoadMessage result = new LoadMessage();

result.DeliveryDate = DateTime.Today.AddDays(3).ToShortDateString();
result.DestinationCity = "Boise";
result.DestinationCountry = "USA";
result.DestinationState = "ID";
result.EventId = Guid.NewGuid();
result.Time = DateTime.Now.ToUniversalTime();
result.OriginState = "OR";
result.OriginCity = "Portland";
result.OriginCountry = "USA";
result.EquipmentID = 3;

return result;
}
}

和订阅者代码

    class Program
{
private static IBus _serviceBus;
private static LoadMessageHandler _messageHandler;

static void Main(string[] args)
{
_messageHandler = new LoadMessageHandler();

_serviceBus = Configure
.With()
.Log4Net()
.DefaultBuilder()
.BinarySerializer()
.MsmqSubscriptionStorage()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();

Console.ReadKey();
}
}

和消息代码

public class LoadMessageHandler : IHandleMessages<LoadMessage>
{
public void Handle(LoadMessage message)
{
Console.WriteLine(String.Format("GUID: {0}", message.EventId));
}
}

最佳答案

更多问题:

1:msmq 传输必须配置为事务性的,发布者才能接受订阅消息。参见 http://blogs.planbsoftware.co.nz/?p=234有关配置这些的示例。

2:发布者正在使用 XmLSerializer 而订阅者正在使用 BinarySerializer,这使得它们不兼容。

关于c# - 无法让自己的主机在 NServiceBus 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com