jboss4官方jms程序(Pub-Sub)
来源:互联网 发布:c语言有趣的代码 编辑:程序博客网 时间:2024/05/17 08:31
两个类:
TopicRecvClient.java(接收类subscriber)
TopicSendClient.java(发送类publisher)
TopicRecvClient.java:
package com.rox.jms;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that synchronously receives a message a Topic
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class TopicRecvClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection();
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void recvSync()
throws JMSException, NamingException
...{
System.out.println("Begin recvSync");
// Setup the pub/sub connection, session
setupPubSub();
// Wait upto 5 seconds for the message
TopicSubscriber recv = session.createSubscriber(topic);
Message msg = recv.receive(5000);
if (msg == null)
System.out.println("Timed out waiting for msg");
else
System.out.println("TopicSubscriber.recv, msgt=" + msg);
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin TopicRecvClient, now="
+ System.currentTimeMillis());
TopicRecvClient client = new TopicRecvClient();
client.recvSync();
client.stop();
System.out.println("End TopicRecvClient");
System.exit(0);
}
}
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that synchronously receives a message a Topic
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class TopicRecvClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection();
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void recvSync()
throws JMSException, NamingException
...{
System.out.println("Begin recvSync");
// Setup the pub/sub connection, session
setupPubSub();
// Wait upto 5 seconds for the message
TopicSubscriber recv = session.createSubscriber(topic);
Message msg = recv.receive(5000);
if (msg == null)
System.out.println("Timed out waiting for msg");
else
System.out.println("TopicSubscriber.recv, msgt=" + msg);
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin TopicRecvClient, now="
+ System.currentTimeMillis());
TopicRecvClient client = new TopicRecvClient();
client.recvSync();
client.stop();
System.out.println("End TopicRecvClient");
System.exit(0);
}
}
TopicSendClient.java:
package com.rox.jms;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that sends a TextMessage to a Topic
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class TopicSendClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection();
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void sendAsync(String text)
throws JMSException, NamingException
...{
System.out.println("Begin sendAsync");
// Setup the pub/sub connection, session
setupPubSub();
// Send a text msg
TopicPublisher send = session.createPublisher(topic);
TextMessage tm = session.createTextMessage(text);
send.publish(tm);
System.out.println("sendAsync, sent text="
+ tm.getText());
send.close();
System.out.println("End sendAsync");
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin TopicSendClient, now="
+ System.currentTimeMillis());
TopicSendClient client = new TopicSendClient();
client.sendAsync("A text msg, now=" + System.currentTimeMillis());
client.stop();
System.out.println("End TopicSendClient");
System.exit(0);
}
}
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that sends a TextMessage to a Topic
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class TopicSendClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection();
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void sendAsync(String text)
throws JMSException, NamingException
...{
System.out.println("Begin sendAsync");
// Setup the pub/sub connection, session
setupPubSub();
// Send a text msg
TopicPublisher send = session.createPublisher(topic);
TextMessage tm = session.createTextMessage(text);
send.publish(tm);
System.out.println("sendAsync, sent text="
+ tm.getText());
send.close();
System.out.println("End sendAsync");
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin TopicSendClient, now="
+ System.currentTimeMillis());
TopicSendClient client = new TopicSendClient();
client.sendAsync("A text msg, now=" + System.currentTimeMillis());
client.stop();
System.out.println("End TopicSendClient");
System.exit(0);
}
}
运行的时候先运行TopicRecvClient,然后迅速(5000毫秒之内)运行TopicSendClient,会看到 TopicRecvClient的控制台中出现接收的信息.topic的消息只能在发送的时候接收到,如果再发送之后再去接收是收不到任何信息的.
还有一种介于p2p和pub2sub之间的一种jms类型(durable pub2sub),写一个java类:
DurableTopicRecvClient.java:
package com.rox.jms;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that synchronously receives a message a Topic
*
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class DurableTopicRecvClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection("john", "needle");
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void recvSync()
throws JMSException, NamingException
...{
System.out.println("Begin recvSync");
// Setup the pub/sub connection, session
setupPubSub();
// Wait upto 5 seconds for the message
TopicSubscriber recv = session.createDurableSubscriber(topic,
"chap6-ex1dtps");
Message msg = recv.receive(5000);
if (msg == null)
System.out.println("Timed out waiting for msg");
else
System.out.println("DurableTopicRecvClient.recv, msgt=" + msg);
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin DurableTopicRecvClient, now="
+ System.currentTimeMillis());
DurableTopicRecvClient client = new DurableTopicRecvClient();
client.recvSync();
client.stop();
System.out.println("End DurableTopicRecvClient");
System.exit(0);
}
}
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSubscriber;
import javax.jms.TopicSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/** *//**
* A JMS client example program that synchronously receives a message a Topic
*
*
*
* @author Scott.Stark@jboss.org
*
* @version $Revision:$
*
*/
public class DurableTopicRecvClient
...{
TopicConnection conn = null;
TopicSession session = null;
Topic topic = null;
public void setupPubSub()
throws JMSException, NamingException
...{
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext iniCtx = new InitialContext(environment);
Object tmp = iniCtx.lookup("ConnectionFactory");
TopicConnectionFactory tcf = (TopicConnectionFactory) tmp;
conn = tcf.createTopicConnection("john", "needle");
topic = (Topic) iniCtx.lookup("topic/testTopic");
session = conn.createTopicSession(false,
TopicSession.AUTO_ACKNOWLEDGE);
conn.start();
}
public void recvSync()
throws JMSException, NamingException
...{
System.out.println("Begin recvSync");
// Setup the pub/sub connection, session
setupPubSub();
// Wait upto 5 seconds for the message
TopicSubscriber recv = session.createDurableSubscriber(topic,
"chap6-ex1dtps");
Message msg = recv.receive(5000);
if (msg == null)
System.out.println("Timed out waiting for msg");
else
System.out.println("DurableTopicRecvClient.recv, msgt=" + msg);
}
public void stop() throws JMSException
...{
conn.stop();
session.close();
conn.close();
}
public static void main(String args[]) throws Exception
...{
System.out.println("Begin DurableTopicRecvClient, now="
+ System.currentTimeMillis());
DurableTopicRecvClient client = new DurableTopicRecvClient();
client.recvSync();
client.stop();
System.out.println("End DurableTopicRecvClient");
System.exit(0);
}
}
这时候就可以先运行TopicSendClient了,然后再运行DurableTopicRecvClient,也可以收到消息.
DurableTopicRecvClient.java中有两句代码需要引起注意:
conn = tcf.createTopicConnection("john", "needle");
TopicSubscriber recv = session.createDurableSubscriber(topic,"chap6-ex1dtps");
TopicSubscriber recv = session.createDurableSubscriber(topic,"chap6-ex1dtps");
- jboss4官方jms程序(Pub-Sub)
- jms pub/sub代码(jms provider: oracle AQ via oc4j )
- Spring JMS 异常消息接收&发送Pub/Sub域消息
- EJB3.0学习笔记---JMS/MDB/Pub/Sub/P2P
- JMS的两种模式 P2P,PUB/SUB
- [ActiveMQ实战]基于JMS的pub/sub传播机制
- 【EJB四】JMS消息服务之P2P和Pub/Sub
- JMS实战——ActiveMQ实现Pub-Sub
- Java Message Service version 2 :使用JMS完成pub/sub
- JMS发布订阅(Pub/Sub)模式示例
- JMS开发(二):深入PTP,Pub-Sub两种模式
- 使用Redis的Pub/Sub来实现类似于JMS的消息持久化
- redis pub/sub 聊天
- Redis 之 pub/sub
- Pub/Sub 发布订阅
- redis pub/sub
- Pub/Sub 机制
- java实现Pub/Sub
- java网络编程--从网络上获取声音
- PHP 会话 (Session) 使用入门
- 哲理故事
- 人见人“吐”的十大经典广告(绝对超经典)[zzzz]
- java 模拟 POST表单操作 HTTPCLIENT的应用 及注意事项
- jboss4官方jms程序(Pub-Sub)
- 一切对象都是资源,请用模式管理(I)
- error C2018: unknown character '0xa1' 错误
- SAN:存储区域网络及其协议
- C# 字符串操作
- java中用静态方法返回类名
- C#基础概念
- 数据表转换为交叉表
- WTK2.2中调用Nokia UI API