私はちょうど JMS を使って仕事を始めたので、 例 を挙げてみました。コンソールにメッセージを入力すると、サブスクライバーはそれを受け取りましたが、例はファイルのみに基づいているため、パブリッシャー ファイルとサブスクライバー ファイルに分割することにしましたが、機能しません。サブスクライバーはメッセージを読みません。 ! この他の例からいくつかのコードを挿入しましたが、まだ何もありません。なぜ私のプログラムはエラーなしで完全にコンパイルされるのか理解できません。誰かがメッセージを読み取らない理由を知っていますか?
私のSubscriber.javaファイルは次のとおりです。
package main;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.sun.messaging.Destination;
public class Subscriver1 {
private TopicSession subSession;
private TopicSubscriber subscriver;
private TopicConnection connection;
private String username;
Destination dest;
public Subscriver1(String topicName, String username, String password)
throws NamingException, JMSException {
Properties env = new Properties();
InitialContext jndi = new InitialContext(env);
TopicConnectionFactory conFactory = (TopicConnectionFactory) jndi
.lookup("topicConn");
TopicConnection connection = conFactory.createTopicConnection(username,
password);
TopicSession subSession = connection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic chatTopic = (Topic) jndi.lookup(topicName);
TopicSubscriber subscriver = subSession.createSubscriber(chatTopic,
null, true);
Destination dest = (Destination) jndi.lookup(topicName);
set(connection, subSession, subscriver, username, dest);
connection.start();
}
private void set(TopicConnection connection2, TopicSession subSession2,
TopicSubscriber subscriver2, String username2, Destination dest2) {
this.connection = connection2;
this.subSession = subSession2;
this.subscriver = subscriver2;
this.username = username2;
this.dest = dest2;
}
public void close() throws JMSException {
connection.close();
}
public void read() throws JMSException {
while (true) {
MessageConsumer consumer = subSession.createConsumer(dest);
;
Message m = consumer.receive(1);
if (m != null) {
if (m instanceof TextMessage) {
TextMessage message = (TextMessage) m;
System.out.println("Reading message: " + message.getText());
} else {
break;
}
}
}
}
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
String text = textMessage.getText();
System.out.println(text);
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
public static void main(String[] args) throws NamingException, JMSException {
Subscriver1 lexoMesazhin = new Subscriver1("kanaliTopic", "user",
"user");
lexoMesazhin.read();
lexoMesazhin.close();
}
}
私のファイルPublisher.javaファイルは
package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Publisher {
private TopicSession pubSession;
private TopicPublisher publisher;
private TopicConnection connection;
private String username;
public Publisher(String topicName, String username, String password)
throws NamingException, JMSException {
Properties env = new Properties();
InitialContext jndi = new InitialContext(env);
TopicConnectionFactory conFactory = (TopicConnectionFactory) jndi
.lookup("topicConn");
TopicConnection connection = conFactory.createTopicConnection(username,
password);
TopicSession pubSession = connection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic chatTopic = (Topic) jndi.lookup(topicName);
TopicPublisher publisher = pubSession.createPublisher(chatTopic);
set(connection, pubSession, publisher, username);
connection.start();
}
private void set(TopicConnection connection2, TopicSession pubSession2,
TopicPublisher publisher2, String username2) {
this.connection = connection2;
this.pubSession = pubSession2;
this.publisher = publisher2;
this.username = username2;
}
protected void createMesage(String text) throws JMSException {
TextMessage mesazhi = pubSession.createTextMessage(text);
mesazhi.setText(username + " >> " + text);
}
public void close() throws JMSException {
connection.close();
}
public static void main(String[] args) throws NamingException,
JMSException, IOException {
Publisher dergonMesazhin = new Publisher("kanaliTopic", "andi", "andi");
BufferedReader commandLine = new java.io.BufferedReader(
new InputStreamReader(System.in));
try {
while (true) {
String s = commandLine.readLine();
if (s.equalsIgnoreCase("exit")) {
dergonMesazhin.close();
System.exit(0);
} else
dergonMesazhin.createMesage(s);
}
} catch (IOException e) {
}
}
}