मैं NServiceBus के लिए नया हूं और एक प्रकाशक और अलग ग्राहक (मैं v3.2.0.0 का उपयोग कर रहा हूं) विकसित करने की कोशिश कर रहा हूं, जो अब तक काम कर रहा है ठीक है - प्रकाशक और ग्राहक दोनों NServiceBus होस्ट में चल रहे हैं। मेरे संदेशों सब ठीक प्रकाशित लेकिन रुक-रुक कर वे निम्न त्रुटि प्रकाशक द्वारा प्रदर्शित किया जा रहा के साथ ग्राहक द्वारा उठाया नहीं मिलता,:NServiceBus चेतावनी "संदेश प्रकार के लिए कोई हैंडलर नहीं मिल सका"
2012-09-05 14:27:37,491 [Worker.6] WARN NServiceBus.Unicast.UnicastBus [(null)] <(null)> - No handlers could be found for message type: MyNamespace.MyMessage
यह चेतावनी है, हालांकि सभी संदेशों के लिए प्रकट नहीं होता है, इसलिए यदि मैं प्रकाशन रखना संदेश के बाद संदेश मैं उनमें से आधे संदेश को प्रदर्शित कर सकता हूं और इसलिए ग्राहक द्वारा उठाया नहीं जा रहा है, हालांकि सभी एमएसएमक्यू कतार में दिखाई दे रहे हैं।
मैं स्वीकार करूंगा कि मैं इसके साथ पकड़ने के लिए संघर्ष कर रहा हूं, इसलिए मेरा कुछ कोड अब तक पूरी तरह से बकवास हो सकता है!
मैं एन एस बी करने के लिए संदेश का प्रकाशन कर रहा हूँ के रूप में निम्नानुसार, संदेश इनपुट विभिन्न प्रकार में से एक मैं परिभाषित किया है होने के साथ:
इस प्रकारprivate void Publish<T>(T message)
{
var myBus = Configure.Instance.Builder.Build<IBus>();
myBus.Publish(message);
}
प्रकाशक की EndpointConfig है के रूप में:
[EndpointName("MyQueue")]
public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
/// <summary>
/// Initialisation for NServiceBus.
/// </summary>
public void Init()
{
Configure.With()
.DefaultBuilder()
.MsmqSubscriptionStorage()
.DisableTimeoutManager()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace"));
}
}
ग्राहक पक्ष पर मेरे पास निम्न एंडपॉइंट कॉन्फ़िग है:
[EndpointName("MyQueue")]
public class EndPointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
Configure.With()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyNamespace"));
}
}
एक EventMessageHandler के साथ इस प्रकार है:
public class EventMessageHandler : IEvent, IHandleMessages<IMyMessage>
{
public void Handle(IMyMessage message)
{
Console.WriteLine(string.Format("Subscriber 1 received EventMessage with Id {0}.", message.Id));
}
}
ग्राहक के app.config है:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
</configSections>
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MyNamespace" Endpoint="MyQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
</configuration>
धन्यवाद डेविड, मैंने गलत तरीके से माना था कि सही बिंदु पर ग्राहक को इंगित करने के लिए एंडपॉइंट समान होना था, लेकिन आपने जो कहा है वह समझ में आता है।मुझे अभी भी प्रकाशक से चेतावनी संदेश मिलता है (अब प्रत्येक संदेश के लिए), लेकिन सभी संदेशों को ग्राहक द्वारा उठाया जा रहा है, इसलिए मैं उससे खुश हूं। धन्यवाद :) – RichardB
वास्तव में, अभी भी दिखाई देने वाली चेतावनियों के बारे में मेरी टिप्पणी को अनदेखा करें - मैंने MyQueue में सभी संदेशों को साफ़ कर दिया है। सदस्यताएं (वहां 3 थीं) और अब यह पूरी तरह से काम कर रही है। – RichardB