jms问题:发布成功订阅时接收不到消息

wks9528 2003-06-25 11:04:14
初学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,发布后还是收不到消息,请大虾指点。
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wks9527 2003-06-30
  • 打赏
  • 举报
回复
因为发布后到可以订阅有一个时延
wks9528 2003-06-26
  • 打赏
  • 举报
回复
可以运行,但有个奇怪的问题:发布消息后为什么要将发布的线程继续等待一段时间,如果立即就让它结束,订阅的线程就收不到!!!!
System.out.println("To end program, enter Q or q, then <return>");
inputStreamReader = new InputStreamReader(System.in);
while (!((answer == 'q') || (answer == 'Q'))){
try{
answer = (char) inputStreamReader.read();
}catch (IOException e){
System.out.println("I/O exception: "+ e.toString());
}
}
如果将上面的一段注掉,程序就收了到消息
djzerotech 2003-06-25
  • 打赏
  • 举报
回复
给个例子http://www.net7b.com/net7b_tech/lookart.asp?id={C4902551-DAB4-4251-808D-77DA15C63289}
wks9527 2003-06-25
  • 打赏
  • 举报
回复
看到了,我先运行试试

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧