/**
* <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学习的更多相关文章

  1. ActiveMQ基本详解与总结& 消息队列-推/拉模式学习 & ActiveMQ及JMS学习

    转自:https://www.cnblogs.com/Survivalist/p/8094069.html ActiveMQ基本详解与总结 基本使用可以参考https://www.cnblogs.co ...

  2. Java的学习之路

    记事本 EditPlus eclipse Java的学习软件,已经系统性学习Java有一段时间了,接下来我想讲一下我在Java学习用到的软件. 1.第一个软件:记事本 记事本是Java学习中最基础的编 ...

  3. Java多线程学习笔记

    进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...

  4. Java Web 学习路线

    实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...

  5. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  6. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  7. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  9. java基础学习总结——java环境变量配置

    前言 学习java的第一步就要搭建java的学习环境,首先是要安装JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath& ...

随机推荐

  1. 欧拉法求解常微分方程(c++)

    #include<iostream> #include<iomanip> using namespace std; int main() { double x, y, h;   ...

  2. Vs2017添加.NET Standard项目出现黄色未引用的SDK

    项目打开文件夹位置,按住shift键,执行dotnet restore命令

  3. GC(一)内存管理与垃圾回收

    参考文章: 内存分配.GC原理与垃圾收集器:http://www.importnew.com/23035.html g1垃圾回收器:http://blog.jobbole.com/109170/ cm ...

  4. 批归一化(Batch Normalization)

    之前在几篇博客中说到了权重共享,但都觉得不够全面,这里做个专题,以后有新的理解都在此更新. 1. 减少运算只是锦上添花之前说到权重共享可以减少运算,是的,但这样说好像是可有可无,只是运算量大小的问题, ...

  5. Fiddler添加过滤条件

  6. variant的过滤 | filtering and prioritizing genetic variants

    WGS和WES测序和分析会产生大量的variant数据. 显然直接分析全部的variant是非常不靠谱的. 做疾病的话,有一些常用的过滤套路. variant作用于基因表达主要分两大类: 1. cod ...

  7. eslint配置大全

    https://segmentfault.com/a/1190000014230857 https://www.jianshu.com/p/23a5d6194a4b VSCODE更新后,格式化会加分号 ...

  8. .netcore里使用StackExchange.Redis TimeOut 情况解决方法

    在用StackExchange.Redis这个组件时候,时不时会出现异常TimeOut解决方法如下, 解决方法: 在Program的Main入口方法里添加一句话: System.Threading.T ...

  9. 查看当前页面的jsp文件【我】

    方法一:可以通过看html类型的请求 方法二:对于有些嵌入的子页面,也可以通过,鼠标右键——此框架——查看框架源代码的方式,直接找到对应的jsp 直接就可以看到对应的jsp:

  10. openvswitch2.11.0修改源码后重新编译

    一:推文 https://www.jianshu.com/p/923f49c290f5(可以删除运行当中的DataPath内核) https://github.com/ebiken/doc-netwo ...