私はメッセージをより速く処理できるように、Windowsサービスから複数のスレッド(タスク)を加入者と同じキューに接続しようとしています。私のキューに接続すると、最初に購読したスレッドでメッセージを受信し、残りはアイドル状態です。私は、メッセージをサブスクライブして受信するために使用していたコードを以下に示します。websphere MQの同じキューに複数のサブスクライバを割り当てることはできますか?
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
を使用してみました。何か不足していますか?
実行しているMQのバージョン(dspmqver出力)を教えてください。 – JasonE
@JasonEバージョン8.0 – PushCode