首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在websphere MQ中,我们可以有多个订阅者到同一个队列吗?

在websphere MQ中,我们可以有多个订阅者到同一个队列吗?
EN

Stack Overflow用户
提问于 2017-03-15 20:48:38
回答 1查看 1K关注 0票数 0

我正在尝试让来自windows服务的多个线程(任务)连接到与订阅者相同的队列,这样我就可以更快地处理我的消息。当我连接到我的队列时,我在我的第一个订阅线程上接收消息,其余的都是空闲的。下面是我用来订阅和接收消息的代码:

代码语言:javascript
复制
private MQQueueManager _queueManager;
private MQQueue _queue;
private MQTopic _topic;
public bool isSubscribed = false;

public void Subscribe()
{
    var queueManagerName = "myQueueManager";
    var properties = new Hashtable();
    //Set all the properties here
    _queueManager = new MQQueueManager(queueManagerName, properties);

    //Conect to Queue
    _queue = _queueManager.AccessQueue("devQueue", MQC.MQOO_INPUT_AS_Q_DEF);

    isSubscribed = true;
    while (isSubscribed)
    {
        if (cancellationToken.IsCancellationRequested)
        {
            isSubscribed = false;
            cancellationToken.ThrowIfCancellationRequested();
        }
        try
        {
            Receive(onMessageReceived);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: {0}", ex);
        }
    }   
}


public override void Receive<T>(Action<T> onMessageReceived)
{
    try
    {
        var dataReceived = new MQMessage();
        _queue.Get(dataReceived);

        T message;
        message = (T)(object)dataReceived;

        onMessageReceived(message);     
        _queueManager.Commit();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

我还尝试使用MQC.MQOO_INPUT_SHARED访问队列,但也不起作用。我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-03-15 23:24:27

您引用的代码尝试打开和接收来自名为"devQueue“的队列的消息。如果该代码在多个线程下运行,那么发送到每个线程的消息将在一定程度上取决于消息的处理速度,以及您连接到的MQ版本。

但是,您在问题中提到了订阅者(并且您引用的代码声明了一个主题和队列)。您是否在应用程序中的其他位置创建了主题的订阅,然后使用此代码接收发送到该订阅的消息?如果是这样,那么您的“队列接收”线程可能只是打开了一个与保存订阅消息的队列不同的队列。初始订阅是如何创建的?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42810254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档