2016-08-12 21 views
0

私はトピックを使って、単純なJMSアプリケーションを持っています。これは、activeMQによって強化されています。それは動作しますが、(たとえ私がコンソールにもっと多くの行を書いていて、より多くのものを送ろうとしても)ただ1つのメッセージが送られています。メッセージが1つしかないのはなぜですか?

ActiveMqのWebコンソールをチェックすると、1つのメッセージしか送信されません(ReceiverTopicクラスでもこのメッセージが表示されます)...どうしてですか?あなた以下

私の差出人コードを見ることができます:

package topic; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageConsumer; 
import javax.jms.MessageListener; 
import javax.jms.MessageProducer; 
import javax.jms.Session; 
import javax.jms.TextMessage; 

import org.apache.activemq.ActiveMQConnection; 
import org.apache.activemq.ActiveMQConnectionFactory; 

public class SenderTopic { 
    private ConnectionFactory factory = null; 
    private Connection connection = null; 
    private Session session = null; 
    private Destination destination = null; 
    private MessageProducer producer = null; 

    private boolean jmsInitialized = false; 

    public SenderTopic() { 

    } 

    private void initJMS() throws JMSException { 
    factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL); 
    connection = factory.createConnection(); 
    connection.start(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    destination = session.createTopic("SAMPLE_TOPIC"); 
    producer = session.createProducer(destination); 
    jmsInitialized = true; 
    } 

    private void sendMessage(String message) { 
    if (!jmsInitialized) { 
     try { 
     initJMS(); 
     sendTextMessage(message); 
     } catch (JMSException e) { 
     jmsInitialized = false; 
     e.printStackTrace(); 
     } 
    } 
    } 

    private void sendTextMessage(String message) throws JMSException { 
    TextMessage textMessage = session.createTextMessage(message); 
    producer.send(textMessage); 
    } 

    public static void main(String[] args) throws IOException { 
    SenderTopic receiver = new SenderTopic(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    while (true) { 
     String message = reader.readLine(); 
     receiver.sendMessage(message); 
    } 
    } 

} 

答えて

4

Intially jmsInitializedの値はfalseあるので、あなたの条件(!jmsInitialized)が真となる場合。 sendMessageの2回目の呼び出しで

jmsInitializedの値がtrueになり、あなたはブール値にnotを使用しているので、もし条件が失敗します。

else条件を追加するには、sendTextMessageを呼び出します。

がくそこの

private void sendMessage(String message) { 
try { 
    if (!jmsInitialized) { 
     initJMS(); 
     sendTextMessage(message); 
    }else{ 
     sendTextMessage(message); 
    } 
    } catch (JMSException e) { 
     jmsInitialized = false; 
     e.printStackTrace(); 
    } 
    } 
} 
+0

を試してみる...、そのようなnoobie間違いを...私は何かが私のJMSの設定で間違っていたと思った...どうもありがとう! – Teshte

+0

@Teshte私の喜び..ええ時々起こる。 – Ravikumar

関連する問題