jms topic 方式怎么拿不到数据
初次接触,我在网上找了些例子:
发布消息:
/**
*
*/
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()来接收消息
}
}
怎么每次去取的时候,都是空的?是不是在哪里要设置下他的时间啊还是什么。请指教啊