jms问题:发布成功订阅时接收不到消息
初学JMS,在weblogic7中配好的Connection Factories、JmsFile Store、server、topic,然后做了个例子,代码如下:
package jmstest;
import javax.jms.*;
import javax.naming.*;
import java.util.Properties;
public class testLister implements MessageListener {
public testLister() {
}
public static void main(String[] args) {
testLister t1 = new testLister();
try{
t1.publish();
t1.comsumer();
//t1.publish();
}catch(Exception ex){
ex.printStackTrace();
}
}
public void publish() throws Exception{
log("start publish.....");
Context ctx = getInitialContext();
TopicConnectionFactory tConFactory = (TopicConnectionFactory)ctx.lookup("MDBDemoCF");
Topic newTopic = (Topic)ctx.lookup("MDBDemoTopic");
TopicConnection tCon = tConFactory.createTopicConnection();
TopicSession session = tCon.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
TopicPublisher publisher = session.createPublisher(newTopic);
TextMessage msg = session.createTextMessage();
msg.setText("Hello everybody!");
publisher.publish(msg);
log("end publish.");
}
public void comsumer() throws Exception{
log("start comsumer....");
Context ctx = getInitialContext();
TopicConnectionFactory tConFactory = (TopicConnectionFactory)ctx.lookup("MDBDemoCF");
Topic newTopic = (Topic)ctx.lookup("MDBDemoTopic");
TopicConnection tCon = tConFactory.createTopicConnection();
TopicSession session = tCon.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
TopicSubscriber subscriber = session.createSubscriber(newTopic);
//异步
//subscriber.setMessageListener(this);
tCon.start();
//同步
log("before receive");
TextMessage msg = (TextMessage)subscriber.receive();
log("end receive");
log("receiver="+msg.getText());
msg.acknowledge();
}
public void onMessage(Message message) {
try{
TextMessage msg = (TextMessage)message;
System.out.println(msg.getText());
msg.acknowledge();
}catch(Exception ex){
ex.printStackTrace();
}
}
private Context getInitialContext() throws NamingException {
try {
// Get an InitialContext
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
return new InitialContext(h);
}catch (NamingException ex) {
throw ex;
}
}
private static void log(String s) {
System.out.println(s);
}
}
不管接收是同步还是异步,总是接收不到,我还试了写个消息Bean,发布后还是收不到消息,请大虾指点。