Java jms学习
/**
* <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();
}
} }
Java jms学习的更多相关文章
- ActiveMQ基本详解与总结& 消息队列-推/拉模式学习 & ActiveMQ及JMS学习
转自:https://www.cnblogs.com/Survivalist/p/8094069.html ActiveMQ基本详解与总结 基本使用可以参考https://www.cnblogs.co ...
- Java的学习之路
记事本 EditPlus eclipse Java的学习软件,已经系统性学习Java有一段时间了,接下来我想讲一下我在Java学习用到的软件. 1.第一个软件:记事本 记事本是Java学习中最基础的编 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- java基础学习总结——java环境变量配置
前言 学习java的第一步就要搭建java的学习环境,首先是要安装JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath& ...
随机推荐
- 冰多多团队alpha阶段发布说明
标题:冰多多Alpha阶段发布说明 Alpha版本功能介绍 我们项目当前是两个部分,前端编辑器和后端mtermux是分开的,是两个独立的app项目,还没有完美的连起来(我们alpha阶段目标任务是不必 ...
- js使浏览器窗口最大化(适用于IE的方法)
这里使用的方法是IE的私有特性,只能在IE中有效.主要是window.moveTo和 window.resizeTo方法. 效果和点击最大化按钮差不多,有一点区别.点击最大化按钮后,浏览器 ...
- Beef搭建并通过Nginx绑定域名
Beef和Nginx安装过程这里就不再说明了相关链接:Beef官方安装教程 1. 修改Beef的config.yaml配置文件 xss连接地址改成要绑定的域名 sudo vim /beef/confi ...
- MLflow系列4:MLflow模型
英文链接:https://mlflow.org/docs/latest/models.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11946260.htm ...
- MYSQL报错:1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'rpa ...
- vmware新加磁盘fdisk看不到的处理
虚拟机硬盘空间不够了,做了lvm准备加块硬盘扩容,在vcenter控制台加了磁盘,结果操作系统里面fdisk -l看不到新加的硬盘,又不想重启怎么办,一条命令就可以搞定. # 注意中间有空格echo ...
- IfcBeam属性
IfcBeam属性和结构 <xs:element name="IfcBeam" type="ifc:IfcBeam" substitutionGroup= ...
- OSI七层模型、TCP/IP五层模型
OSI网络互连的七层框架:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: <1>应用层 OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网络服 ...
- flutter 打包apk之后,安装在手机上无法访问网络解决方法
</application> <uses-permission android:name="android.permission.READ_PHONE_STATE" ...
- 箱型图Box
箱型图Box 觉得有用的话,欢迎一起讨论相互学习~Follow Me 又称为盒须图.盒式图.盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图. 箱形图最大的优点就是不受异常值的影响,能够准确 ...