importjava.io.Serializable;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageConsumer;importjavax.jms.MessageListener;importjavax.jms.MessageProducer;importjavax.jms.ObjectMessage;importjavax.jms.Session;/*本工具封装了*/
importjavax.jms.TextMessage;importjavax.jms.Topic;importjavax.jms.TopicConnection;importjavax.jms.TopicConnectionFactory;importjavax.jms.TopicPublisher;importjavax.jms.TopicSession;importjavax.jms.TopicSubscriber;importorg.apache.activemq.ActiveMQConnection;importorg.apache.activemq.ActiveMQConnectionFactory;public classJMSTopic {
TopicConnectionFactory connectionFactory;//Connection :JMS 客户端到JMS Provider 的连接
TopicConnection connection = null;//用来发布的会话
TopicSession proSession= null;//2一个订阅会话
TopicSession conSession = null;//主题发布者
MessageProducer producer=null;//主题
MessageConsumer consumer=null;//Destination :消息的目的地;消息发送给谁.
Destination destination;//MessageProducer:消息发送者//默认构造函数,默认的连接activemq,可以写多个构造函数
publicJMSTopic()
{
connectionFactory= newActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try{
connection=connectionFactory.createTopicConnection();
}catch(JMSException e) {//TODO Auto-generated catch block
e.printStackTrace();
}try{
connection.start();
}catch(JMSException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//此处先固定消息为String类型
public voidwriteMessage(String t,String message )
{try{
proSession=connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
producer=proSession.createProducer(proSession.createTopic(t));//使用message构造TextMessage
TextMessage text=proSession.createTextMessage();
text.setText(message);
producer.send(text);
}catch(JMSException e) {//TODO Auto-generated catch block
e.printStackTrace();
}//创建发布会话应该是可以配置的,此处先固定
}public voidwriteMessage(String t,Object o )
{try{
proSession=connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
producer=proSession.createProducer(proSession.createTopic(t));//使用message构造TextMessage
ObjectMessage text=proSession.createObjectMessage();
text.setObject((Serializable) o);
producer.send(text);
}catch(JMSException e) {//TODO Auto-generated catch block
e.printStackTrace();
}//创建发布会话应该是可以配置的,此处先固定
}//使用某个Message监听器来监听某个Topic
public voidreceiveMsg(String c,MessageListener ml)
{try{
conSession=connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
Topic t=conSession.createTopic(c);
consumer=conSession.createConsumer(t);//设置过来的监视器
consumer.setMessageListener(ml);
}catch(JMSException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}