2016-07-27 29 views
0

IBM MQを使用して、クライアント上のコンシューマーからメッセージを受信して​​います。接続を作成するために、私はJmsConnectionFactoryと、サーバーとの接続をセットアップするために提供されたプロパティを使用しています。私が理解しているところでは、消費者がサーバーによって生成されたメッセージを認識する唯一の方法は、onMessage呼び出しです。私は現在、ローカルのプロデューサとローカルのコンシューマを作成し、プロデューサによって送信されたすべてのメッセージがコンシューマによって受信されることを保証することでこれをテストしています。IBM MQはすべてのJMSメッセージを送受信できません

私は、次の問題に実行している:私は生成されたすべてのメッセージを受信して​​いないよ

  1. メッセージのサイズによっては、メッセージのサイズが小さい場合はそれ以上のメッセージが受信されます。

ここでは、プロデューサーを作成するためのコードです:

JmsConnectionFactory cf = ff.createConnectionFactory(); 

cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, qm.getHost()); 

int port = ###; 
cf.setIntProperty(WMQConstants.WMQ_PORT, port); 
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, qm.getChannel()); 
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT); 
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, qm.getQueueManagerName()); 

Connection connection = cf.createConnection(qm.getUser().getUsername(), qm.getUser().getPassword()); 
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

Destination destination = session.createQueue(qm.getDestinationName()); 
LOG.debug("Destination Created at " +qm.getDestinationName()); 

msgSender = session.createProducer(destination); 
msgSender.setDeliveryMode(DeliveryMode.PERSISTENT); 

そして、これはプロデューサーがメッセージを送信している方法です:消費者側では

/** 
* msgSender is the MessageProducer object 
**/ 
private void produceMessages(int numOfMessages) throws JMSException, InterruptedException { 
    for (int i = 0; i < numOfMessages; i++) { 
     String text = "Message #" +i; 
     TextMessage message = session.createTextMessage(text); 
     msgSender.send(message); 
    } 
} 

を、私は単純に受信した印刷していますメッセージを確認して視覚的に確認する:

@Override 
public void onMessage(Message m) { 
    System.out.println(((TextMessage)m).getText()); 
} 

私は、IBM MQがどのように動作するかについて十分には理解していません。欠落しているメッセージの理由は、メッセージが完全に送信される前に生成されたメッセージを単純に無視するMQに存在する可能性がありますか?

答えて

0

あなたのシミュレートしたプロデューサーではなく、消費者側に問題があると言います。あなたのメッセージプロデューサーはメッセージをMQに送信するべきですが、複数のコンシューマーは、あなたが設定した接続から(同じキューマネージャーのプロパティを使って)これらのメッセージを検索するために競合している可能性があります。だから誰もあなたのIBM MQから消費しようとしない限り、あなたはいくつかのメッセージを見逃すことになるでしょう。

関連する問題