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& ...
随机推荐
- 记一次vue+vuex+vue-router+axios+elementUI开发(三)
项目用到了状态管理工具 Vuex 中文文档:https://vuex.vuejs.org/zh/guide/ 大家都知道,vue中可用props将父组件的数据传递给子组件,但是有个问题,子组件一般不 ...
- HTTPS加密协议过程
1.客户端发起https请求 指用户在浏览器中输入一个https网址,然后链接到server的443端口 2.服务端的配置 在服务端向CA机构申请SSL数字证书.SSL证书就是一对公钥和私钥.公钥相当 ...
- R 目录及文件操作
获取当前路径 getwd() 切换当前路径 setwd() 返回上一级目录 setwd(dirname(getwd())) 获取文件所在路径 dirname() 查看当前目录的子目录 lis ...
- cgdsR 下载TCGA数据
TCGA 的数据可以在5个组织机构获取,它们都提供了类似的接口来供用户下载数据. cgdsR 包是cBioPortal 提供的R包 http://www.cbioportal.org/rmatlab ...
- Excel多表头设置二级联动选择
1.初始准备 2.全选,然后开始 -> 查找和选择 -> 定位条件 3.公式 -> 根据所选内容创建 因为一级联动数据在第一行,所以选首行 4.因为学校信息与联动数据不在同一个she ...
- [Beta阶段]第四次Scrum Meeting
Scrum Meeting博客目录 [Beta阶段]第四次Scrum Meeting 基本信息 名称 时间 地点 时长 第四次Scrum Meeting 19/05/06 大运村寝室6楼 30min ...
- [Beta阶段]第五次Scrum Meeting
Scrum Meeting博客目录 [Beta阶段]第五次Scrum Meeting 基本信息 名称 时间 地点 时长 第五次Scrum Meeting 19/05/10 新主楼F座2楼 50min ...
- 使用iis部署asp.net core 中的坑
使用vs2017创建asp.net core mvc 模板网站然后部署到iis上,如果在一直有并发访问的情况下,操作iis重新绑定域名操作,网站会直接挂掉,重启应用池也没用,而且部署到iis上容易出现 ...
- Rose与PowerDesigner:两款UML建模工具的对比
声明 本文转载自:Rose与PowerDesigner:两款UML建模工具的对比 正文 本文和大家重点讨论一下Rose与PowerDesigner:两款UML建模工具的对比,Rose和PowerDes ...
- 图片放大神器: waifu2x
在线版可以在这个地址上使用:http://waifu2x.udp.jp/index.zh-CN.html , 但是在线版最大图片为5M,最大上传分辨率为1500*1500,且最大放大倍数为2倍,还是有 ...