jms topic 方式怎么拿不到数据

tomlizx 2010-04-20 09:40:13
初次接触,我在网上找了些例子:
发布消息:
/**
*
*/
package dlc.jboss.mqexample;

import java.util.Hashtable;
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.Context;
import javax.naming.InitialContext;

/**
* 主题式的进行发送消息例子
*
* @author lenovo
*
*/
public class PublishToTopic {

/**
* @param args
* @return void
* @auther lenovo 2010-4-19 下午02:09:12
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TopicConnection tc = null;

try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
Context ctx = new InitialContext(env);

// 建立连接工厂;并从连接工厂中建立消息队列连接;再从消息队列连接中建立一个会话;
// 再从会话中建立发送对象
Object tmp = ctx.lookup("ConnectionFactory");

TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;

Topic t = (Topic) ctx.lookup("topic/TopicExample"); // 注意前面的Topic要小写首字母
tc = tcf.createTopicConnection();
TopicSession ts = tc.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
TopicPublisher tp = ts.createPublisher(t);
TextMessage msg = ts.createTextMessage();
for (int i = 0; i < 10; i++) {
msg.setText("Welcome number " + (i + 1));
tp.publish(msg);
System.out.println("Publish Message To "
+ " topic/TopicExample " + " : " + msg.getText()
+ "\n");
}
tp.close();
ts.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (tc != null) {
try {
tc.close();
} catch (JMSException e) {
}
}
}
}

}



接收的:
package dlc.jboss.mqexample;

import java.util.Properties;

import javax.jms.JMSException;
import javax.jms.Message;
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.Context;
import javax.naming.InitialContext;

/**
* @author lenovo
*
*
*/
public class SubscribeFromTopic {


public static void doSubscribe(String tName) {
Message msg;
TextMessage txtMsg;
TopicConnection tc = null;
try {
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.setProperty(Context.PROVIDER_URL, "localhost:1099");

InitialContext jc = new InitialContext(p);
TopicConnectionFactory tcf = (TopicConnectionFactory) jc
.lookup("ConnectionFactory");
Topic t = (Topic) jc.lookup(tName);
tc = tcf.createTopicConnection();
TopicSession ts = tc.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
TopicSubscriber tSubscriber = ts.createSubscriber(t);

msg = tSubscriber.receive(100);
while (msg != null) {
if (msg instanceof TextMessage) {
txtMsg = (TextMessage) msg;
System.out.println("Receive Msg from " + tName + " : "
+ txtMsg.getText());
}
msg = tSubscriber.receive(100);
}

tSubscriber.close();
ts.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (tc != null) {
try {
tc.close();
} catch (JMSException e) {
}
}
}
}

public static void main(String[] args) {
//doListen(tName); // 通过消息监听器接收消息
doSubscribe("topic/TopicExample"); //通过receive()来接收消息
}
}


怎么每次去取的时候,都是空的?是不是在哪里要设置下他的时间啊还是什么。请指教啊
...全文
106 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomlizx 2010-04-27
  • 打赏
  • 举报
回复
打不起 能直接给出正确的吗
humanity 2010-04-25
  • 打赏
  • 举报
回复
我把代码重排版,似乎写错了吧。如果 100 ms 没等到消息就退出了。
里面的 if (msg instanceof TextMessage) 干扰了你的思维。
最好养成好的写代码习惯,减少无意间出错的概率。

msg = tSubscriber.receive(100);
while (msg != null) {
if (msg instanceof TextMessage) {
txtMsg = (TextMessage) msg;
System.out.println("Receive Msg from " + tName + " : " + txtMsg.getText());
}

msg = tSubscriber.receive(100);
}
tomlizx 2010-04-24
  • 打赏
  • 举报
回复
都很忙吗,给点回复好不

67,513

社区成员

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

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