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& ...
随机推荐
- error: 'for' loop initial declaration used outside C99 mode的解决方法
for(int i = 0;i<10;i++)这样写循环时可能会出现如题编译错误,解决方法有两种,如下:1 将文件后缀名由".c"改为".cpp"2 in ...
- 微信小程序for循环中传递动态参数
for循环中的参数,没法传到对应的 js里,所以直接在 wxml页面上跳转 发送参数的 wxml页面 <view class="uploader" wx:for=" ...
- CentOS7.6 X64搭建mysql服务
1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...
- SearchLookupEdit 选择后联动
直接改绑定数据源--实体的属性会导致选择内容变空 所有改相应控件的text然后再写入数据源 最好将需要联动的控件设置成只读 mNoTextEdit.EditValueChanged += (s, e) ...
- JAVA中String空对象的字符串拼接
今天使用JSONObject中get一个不存在的对线,最后拼接成sql语句插入数据库时,最后数据库中的值为字符串'null',而不是空对象. 追踪许久才发现自己的java白学了. java strin ...
- WMS培训20190907
SELECT * FROM WMSADMIN.SPROCEDUREMAP WHERE THEPROCNAME ='NSPBEFOREORDERWRITE' 二,. RF中页面中需要增加申请人,而成品仓 ...
- web.py小记
what's the web.py 相比于 Django 和 Flask,web.py 是轻量到不能再轻量的 web 框架,所有的功能都需要自己实现,所有不适合中大型 web 的开发,不过对于简单的 ...
- MySQL高效分页-mybatis插件PageHelper改进
MySQL分页在表比较大的时候,分页就会出现性能问题,MySQL的分页逻辑如下:比如select * from user limit 100000,10 它是先执行select * from user ...
- spark org.apache.spark.ml.linalg.DenseVector cannot be cast to org.apache.spark.ml.linalg.SparseVector
在使用 import org.apache.spark.ml.feature.VectorAssembler 转换特征后,想要放入 import org.apache.spark.mllib.clas ...
- 仿简书MarkDown编辑器可同步滚动
模仿简书的MarkDown编辑器,使用Angular8写的示例 1.支持同步滚动 编辑的过程中,右侧预览界面会同步滚动.滚动右侧预览界面,左侧编辑区也会同步滚动哦 2.支持语法高亮 如下: using ...