/**
* <html>
* <body>
* <P> https://github.com/Jasonandy </p>
* <p> All rights reserved.</p>
* <p> Created on 2018年6月12日 下午4:00:58</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.jms; import java.util.Hashtable; 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;
import javax.naming.NamingException; /**
* @Package:cn.ucaner.component.jms
* @ClassName:MsgPublisher
* @Description: <p> jms publiser </p>
* <url> https://blog.csdn.net/zhangzikui/article/details/24837999 </url>
* @Author: - Jason
* @CreatTime:2018年6月12日 下午4:00:58
* @Modify By:
* @ModifyTime: 2018年6月12日
* @Modify marker:
* @version V1.0
*/
public class MsgPublisher { /**
* JMS连接,属于Pub/Sub方式的连接
*/
TopicConnection topicConnection; /**
* JMS会话,属于Pub/Sub方式的会话
*/
TopicSession topicSession; /**
* 消息发布者
*/
TopicPublisher topicPublisher; /**
* 主题
*/
Topic topic; public MsgPublisher(String factoryJNDI, String topicJNDI)throws JMSException, NamingException {
Hashtable<String, String> env = new Hashtable<String, String>(); /**
* 设置好连接JMS容器的属性,不同的容器需要的属性可能不同,需要查阅相关文档
*/
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1088");
env.put("java.naming.rmi.security.manager", "yes");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming"); /**
* 创建连接JMS容器的上下文(context)
*/
Context context = new InitialContext(env); /**
* 通过连接工厂的JNDI名查找ConnectionFactory
*/
TopicConnectionFactory topicFactory = (TopicConnectionFactory) context.lookup(factoryJNDI); /**
* 用连接工厂创建一个JMS连接
*/
topicConnection = topicFactory.createTopicConnection(); /**
* 通过JMS连接创建一个Session
*/
topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); /**
* 通过上下文查找到一个主题(topic)
*/
topic = (Topic) context.lookup(topicJNDI); /**
* 用session来创建一个特定主题的消息发送者
*/
topicPublisher = topicSession.createPublisher(topic); } /**
* @Description: 发布一条文本消息
* @param msg 待发布的消息
* @throws JMSException void
* @Autor: Jason - jasonandy@hotmail.com
*/
public void publish(String msg) throws JMSException {
/**
* 用session来创建一个文本类型的消息
*/
TextMessage message = topicSession.createTextMessage();
/**
* 设置消息内容
*/
message.setText(msg);
/**
* 消息发送,发送到特定主题
*/
topicPublisher.publish(topic, message);
} public void close() throws JMSException {
topicSession.close();//关闭session
topicConnection.close();//关闭连接 }
public static void main(String[] args)throws JMSException, NamingException { MsgPublisher publisher = new MsgPublisher("ConnectionFactory", "topic/testTopic"); try {
for (int i = 1; i < 11; i++) {
String msg = "Hello World no. " + i;
System.out.println("Publishing message: " + msg);
publisher.publish(msg);
}
/**
* session和connection用完之后一定记得关闭
*/
publisher.close();
} catch (Exception ex) {
ex.printStackTrace();
} } }
/**
* <html>
* <body>
* <P> https://github.com/Jasonandy </p>
* <p> All rights reserved.</p>
* <p> Created on 2018年6月12日 下午4:00:58</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.jms; import java.util.Hashtable; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
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;
import javax.naming.NamingException; /**
* @Package:cn.ucaner.component.jms
* @ClassName:MsgSubscriber
* @Description: <p> MsgSubscriber </p>
* <url> https://blog.csdn.net/zhangzikui/article/details/24837999 </url>
* @Author: -
* @CreatTime:2018年6月12日 下午4:10:55
* @Modify By:
* @ModifyTime: 2018年6月12日
* @Modify marker:
* @version V1.0
*/
public class MsgSubscriber implements MessageListener{ TopicConnection topicConnection; TopicSession topicSession; TopicSubscriber topicSubscriber; Topic topic; @Override
public void onMessage(Message msg) {
try {
if (msg instanceof TextMessage) {
//把Message 转型成 TextMessage 并提取消息内容
String msgTxt = ((TextMessage) msg).getText();
System.out.println("HelloSubscriber got message: " +msgTxt);
}
} catch (JMSException ex) {
System.err.println("Could not get text message: " + ex);
ex.printStackTrace();
}
} public MsgSubscriber(String factoryJNDI, String topicJNDI)throws JMSException, NamingException {
Hashtable<String, String> env = new Hashtable<String, String>();
//设置好连接JMS容器的属性,不同的容器需要的属性可能不同,需要查阅相关文档
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1088");
env.put("java.naming.rmi.security.manager", "yes");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming");
Context context = new InitialContext();
TopicConnectionFactory topicFactory = (TopicConnectionFactory) context.lookup(factoryJNDI);
//创建连接
topicConnection = topicFactory.createTopicConnection();
topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);//创建session
topic = (Topic) context.lookup(topicJNDI);//查找到主题
//用session创建一个特定queue的消息接收者
topicSubscriber = topicSession.createSubscriber(topic);
//注册监听,这里设置的监听是自己,因为本类已经实现了MessageListener接口,
//一旦queueReceiver接收到了消息,就会调用本类的onMessage方法
topicSubscriber.setMessageListener(this);
System.out.println("HelloSubscriber subscribed to topic: "+ topicJNDI);
topicConnection.start();//启动连接,这时监听器才真正生效
} public void close() throws JMSException {
topicSession.close();
topicConnection.close();
} public static void main(String[] args) {
try {
new MsgSubscriber("TopicConnectionFactory","topic/testTopic");
} catch (Exception ex) {
ex.printStackTrace();
}
} }

最新文章

  1. maven 配置
  2. SQL Server:“数据收缩”详解
  3. TCP三次握手,数据传输,四次挥手
  4. struts2 DMI
  5. java的重载、覆盖和隐藏的区别
  6. 双系统下恢复Ubuntu引导菜单
  7. Codeforces 627 A. XOR Equation (数学)
  8. javascript 库
  9. 【转】vs2008中leptonica-1.68安装配置
  10. BZOJ 1087
  11. Struts2 设置global timer
  12. 打开mac上面的apache 服务器
  13. Mac下nodeJS初体验
  14. c# 正则
  15. Math.round(),Math.ceil(),Math.floor()
  16. on条件与where条件的区别
  17. C语言学习之路
  18. 在Java、Web和移动开发方面最值得关注的12大开源框架
  19. Object-c基本语法
  20. Gym - 101020H Weekend floyd+next_permutation

热门文章

  1. HashSet Integer输出有序,String输出无序
  2. IO多路复用之Reactor
  3. Java Thread dump 日志分析
  4. abp 中log4net 集成Kafka
  5. [Web] 深入理解现代浏览器
  6. Windows curl开启注意事项
  7. java--poi读取excel图片和内容(支持03版本)
  8. SQLServer查看及设置最大连接数(转)
  9. OSI七层模型、TCP/IP五层模型
  10. Elasticsearch学习之集群常见状况处理(干货)