Я пытаюсь подключиться с моего кода C# к IBM MQ.Несколько слушателей MQ не работают
Обратный звонок работает для одного слушателя (прислушивается к очереди). то есть, когда сообщение приходит в очередь, метод обратного вызова правильно вызывается.
Я создал другую очередь # 2 на том же QueueManager/Channel. Зарегистрировал нового слушателя в этой очереди с помощью другого метода обратного вызова. Во время запуска сервера ошибок не наблюдается.
Когда сообщение поступает в эту очередь # 2, вызывается обратный вызов, связанный с первой очередью, а не тот, который я зарегистрировал для этой очереди. Я попытался создать другой сеанс, а также другое соединение, но все же поведение такое же.
Есть ли у кого-нибудь идеи?
class Program
{
static void Main(string[] args)
{
string env = "DEV"
string queueName1= "Queue1"
string queueName2 = "Queue2"
new MyListener(CallbackHandler1.onMessage1, env, queueName1).RegisterListener();
new MyListener(CallbackHandler2.onMessage2, env, queueName2).RegisterListener();
}
public class MyListener
{
public delegate void Handler (IMessage msg)
public static Handler _handler
private string env = "";
private string queue = "";
public MyListner(Handler _handler, string environment, string queueName)
{
_handler = _handler;
this.env = environment;
this.queue = queueName
}
public void RegisterListener()
{
XMSFactoryFactory xff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory cf = xff.CreateConnectionFactory();
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "10.87.188.156(7111)");
cf.SetIntProperty(XMSC.WMQ_PORT, 7111);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, "QMEIGS1.CRM.SVRCONN");
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT_UNMANAGED);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "QMEIGS1");
IConnection conn = cf.CreateConnection();
Console.WriteLine("connection created");
ISession sess = conn.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination dest = sess.CreateQueue(queue);
IMessageConsumer consumer = sess.CreateConsumer(dest);
MessageListener ml = new MessageListener(OnMessage);
consumer.MessageListener = ml;
conn.Start();
Console.WriteLine("Consumer started");
}
private void onMessage(IMessage m)
{
try {
_handler(m)
}
catch (Exception e)
{
}
}
}
//callback 1
public class CallbackHandler1
public static void onMessage1(IMessage msg)
{
ITextMessage textMessage = IMessage(msg)
// code to perform onmessage1
}
//callback 2
public class CallbackHandler2
public static void onMessage2(IMessage msg)
{
ITextMessage textMessage = IMessage(msg)
// code to perform onmessage2
}
Вы видите какие-либо ошибки? Как определяются ваши каналы? Какую версию MQ вы используете? Чтобы использовать MQCB на клиенте V7, вы должны быть подключены к серверу V7, а параметр SHARECNV канала должен иметь ненулевое значение. – ValerieLampkin
Можете ли вы показать нам свой код? – Shashi
Ваши очереди на самом деле не называются queue # 1, а очереди # 2 - они? –