通过JBOSS服务器来实现JMS消息传送
首先必须启动JBOSS服务器,以便于充当JMS传递消息的中间键;
JBOSS消息发送端:
package test; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import java.util.Properties; import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext; /**
* <p>Description:JMS客户端消息生产者 </p>
*/
public class JMSProducer {
private static final Logger log = Logger.getLogger(JMSProducer.class.getName()); private static final String DEFAULT_MESSAGE = "the 4 message!";
// xml文件272行
private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
// xml文件293行,初次找JBOSS的JNDI太不容易了
private static final String DEFAULT_DESTINATION = "jms/queue/test";
private static final String DEFAULT_MESSAGE_COUNT = "1"; private static final String DEFAULT_USERNAME = "admin";
private static final String DEFAULT_PASSWORD = "123456";
private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
//private static final String INITIAL_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
private static final String PROVIDER_URL = "remote://localhost:4447"; public static void main(String[] args) throws Exception {
Context context=null;
Connection connection=null;
try {
// 设置上下文的JNDI查找
log.info("设置JNDI访问环境信息也就是设置应用服务器的上下文信息!");
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);// 该KEY的值为初始化Context的工厂类,JNDI驱动的类名
env.put(Context.PROVIDER_URL, PROVIDER_URL);// 该KEY的值为Context服务提供者的URL.命名服务提供者的URL env.put(Context.SECURITY_PRINCIPAL, DEFAULT_USERNAME);
env.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD);//应用用户的登录名,密码.
// 获取到InitialContext对象.
context = new InitialContext(env);
log.info("初始化上下文,'JNDI驱动类名','服务提供者URL','应用用户的账户','密码'完毕.");
log.info("获取连接工厂!");
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup(DEFAULT_CONNECTION_FACTORY);
log.info("获取目的地!");
Destination destination = (Destination) context.lookup(DEFAULT_DESTINATION); // 创建JMS连接、会话、生产者和消费者
connection = connectionFactory.createConnection(DEFAULT_USERNAME, DEFAULT_PASSWORD);
log.info("开启JMS工厂模式");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
log.info("获取操作连接");
MessageProducer producer = session.createProducer(destination);
connection.start();
log.info("启动工程模式与连接");
int count = Integer.parseInt(DEFAULT_MESSAGE_COUNT);
// 发送特定数目的消息
TextMessage message = null;
for (int i = 0; i < count; i++) {
message = session.createTextMessage(DEFAULT_MESSAGE);
producer.send(message);
log.info("message:"+message);
log.info("message:"+DEFAULT_MESSAGE);
}
// 等待30秒退出
CountDownLatch latch = new CountDownLatch(1);
latch.await(30, TimeUnit.SECONDS); } catch (Exception e) {
log.severe(e.getMessage());
throw e;
} finally {
if (context != null) {
context.close();
}
// 关闭连接负责会话,生产商和消费者
if (connection != null) {
connection.close();
}
}
}
}
JMS消息接收端:
package test;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext; public class JMSConsumer {
private static final Logger log = Logger.getLogger(JMSConsumer.class.getName());
private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
private static final String DEFAULT_DESTINATION = "jms/queue/test";
private static final String DEFAULT_USERNAME = "admin";
private static final String DEFAULT_PASSWORD = "123456";
private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
private static final String PROVIDER_URL = "remote://localhost:4447"; public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
MessageConsumer consumer = null;
Destination destination = null;
TextMessage message = null;
Context context = null;
try {
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, PROVIDER_URL);
env.put(Context.SECURITY_PRINCIPAL, DEFAULT_USERNAME);
env.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD);
context = new InitialContext(env);
connectionFactory = (ConnectionFactory) context.lookup(DEFAULT_CONNECTION_FACTORY);
destination = (Destination) context.lookup(DEFAULT_DESTINATION);
connection = connectionFactory.createConnection(DEFAULT_USERNAME, DEFAULT_PASSWORD);
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
consumer = session.createConsumer(destination);
connection.start(); // 等待30秒退出
CountDownLatch latch = new CountDownLatch(1);
while (message == null) {
log.info("开始从JBOSS端接收信息-----");
message = (TextMessage) consumer.receive(5000);
latch.await(1, TimeUnit.SECONDS);
}
log.info("接收到的消息的内容:" + message.getText());
} catch (Exception e) {
log.severe(e.getMessage());
throw e;
} finally {
if (context != null) {
context.close();
}
if (connection != null) {
connection.close();
}
}
}
}
通过JBOSS服务器来实现JMS消息传送的更多相关文章
- Java JMS——消息服务
转载请注明原文地址: https://www.cnblogs.com/ygj0930/p/10921569.html 一:什么是Java消息服务—— 消息通信接口规范 Java消息服务指的:两个应用程 ...
- JMS消息通信服务
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
- JMS消息传输机制
JMS消息传送模型: 消息传送机制, 是基于拉取(pull)或者轮询(polling)的方式. JMS具备两种"消息传送模型": P2P和Pub/sub. (1) P2P:点对点 ...
- JMS发布/订阅消息传送例子
前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要 ...
- JMS学习六(ActiveMQ消息传送模型)
ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布 /订阅模型),分别称作:PTP Domain 和Pub/Sub Domain. 一.PTP消息传送模型 ...
- 三:JMS消息服务规范
一:JMS是什么?--->JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API--->用于在两个应用程 ...
- Intellij IDEA 创建消息驱动Bean - 接收JMS消息
除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...
- JMS - 消息确认
消息确认机制 消息确认协议是保证消息传送的关键所在,同时,支持确认也是 JMS API 语义的要求.以下将分别从消息生产者.消息服务器.消息消费者的角度,来考察消息确认机制. 从消息生产者的角度考察 ...
- Oozie 生成JMS消息并向 JMS Provider发送消息过程分析
一,涉及到的工程 从官网下载源码,mvn 编译成 Eclipse工程文件:
随机推荐
- tf-idf 词条权重计算
在文本分类问题中,某些高频词一直出现,这样的词对区分文档的作用不大,例如: D1: 'Job was the chairman of Apple Inc.' D2: 'I like to use ...
- Openssl命令的使用
用途: pkcs8格式的私钥转换工具.它处理在PKCS#8格式中的私钥文件.它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 Private ...
- delphi 获取文件图标
{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}procedure GetFileIcon(TypeName: Widestring; I ...
- sqoop简介和原理分析
Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- Redis消息订阅与发布
监听器的创建 package com.sogou.baike.testimport.testSubscribe; import redis.clients.jedis.JedisPubSub; pub ...
- 基于Netty的RPC架构学习笔记(一):NIO
文章目录 传统的socket分析 举个
- 完美解决 IE6 position:fixed 固定定位问题
关于 position:fixed; 属性 生成绝对定位的元素,相对于浏览器窗口进行定位. 元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定. pos ...
- express 创建项目
express 创建项目: 1.熟悉express命令 2.创建模板 3.安装组件
- Codeforces Round #525 E - Ehab and a component choosing problem
题目大意: 在一棵树中 选出k个联通块 使得 这k个联通块的点权总和 / k 最大 并且这k个联通块不相互覆盖(即一个点只能属于一个联通块) 如果有多种方案,找到k最大的那种 给定n 有n个点 给定n ...
- FILE_OBJECT
https://msdn.microsoft.com/en-us/library/windows/hardware/ff545834(v=vs.85).aspx The FILE_OBJECT str ...