We have a Windows Service using .NET 4.5 publishing messages to the bus using Neuron 2.6 and it's taking about 1.5 seconds, which is way too long.
Every time we publish a message, we do this:
using (var publisher = new Publisher(subscriberConfiguration))
{
publisher.Connect();
retVal = publisher.Send(topic, message);
}
Our profiler identifies this as the slowest part of our code by far. This code is called by thousands of threads and must execute quickly. We are trying to think of ways to speed this up.
Is it safe to create a static Publisher, initialize and Connect just once at the start of our service, and just call Send() from all the threads as needed. Would this speed things up sufficiently, and is it safe to call the Send method from multiple threads at the same time?
Also, what happens if the connection drops for some reason, is there a way to detect and reconnect gracefully without loosing messages?
Thanks in advance,
Dan
yes..that should work, just make sure you put locking in place and look catch the offline events...connect errors, etc. you can catch the Send error....if you get disconnected...place a lock around everything and reconnect and send. There's a sample project in the updated Neuron Fundamentals training doc
Thanks for the quick reply Marty,
Are you saying that we need to lock the call like this?
lock(publisher)
{
while (true)
{
try {
publisher.Send(...);
return;
}
catch(...)
{
publisher.Connect();
}
}
}
Do we really need to lock the Send() method, or just the Connect method?
Also, where do we find the "Neuron Fundamentals training doc"? Is this available online or installed in the Neudesic directory (we have both 2.6 full version and the 3.0 beta installed).
Thanks again,
Dan
Neuron ESB Product Support Forums and Communities
© 2024 Created by Neuron Admin. Powered by