预计达成目标:Weblogic8下实现消息的异步传输与监听
为了实现不间断发送与监听,使用了Quartz自动调度,这个不是这篇文章重点,不做讲解,也可以将quartz去掉
quartz引用的jar包比较多,这里就不作为附件了,只上传jms需要依赖的jar包 ,其中还有weblogic.jar,太大了就没有上传,可以在weblogic的安装bin目录下找到.
配置步骤
一、建立 Weblogic Domain:建立步骤不再累述
二、在Console控制台配置连接工厂与消息队列
1、配置连接工厂
按如下路径点击:Service—>JMS—> Connection Factories,在右侧弹出的页面,点击链接“Configure a new JMS Connection Factory...”,在新页面中输入Name及JNDI Name,此处两处均输入连接工厂名为:jms/connFactory,点击“Create”则生成JMS连接工厂
如下图:
2、配置消息队列
如下图位置配置队列,这个jmsServer是自己建立的
到此位置就配置了一个 名称为 jms/connFactory 的连接工厂以及名为 queueasd 的队列
三、消息发送测试类
package com.javasd.jms;
import java.util.Properties;
import javax.jms.BytesMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class TestJmsConnection implements Job {
public static void main(String args[]) throws Exception {
//quartz调度,不做讲解
SchedulerFactory schedFact=new StdSchedulerFactory();
Scheduler sched=schedFact.getScheduler();
sched.start();
JobDetail jobDetail=new JobDetail("a","b",TestJmsConnection.class);
jobDetail.getJobDataMap().put("name","lucy");
CronTrigger trigger=new CronTrigger("c","d");
trigger.setCronExpression("0/100 * * * * ? " ); // 启动之后立即执行 每一秒继续重复。
sched.scheduleJob(jobDetail, trigger);
}
public void execute(JobExecutionContext arg0) throws JobExecutionException {
try{
//这里才是jms发送端的逻辑
Properties properties = new Properties();
//设置连接属性
//这个设置是固定的
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
//设置端口及IP 我的domain在本地,端口为9001
properties.put(Context.PROVIDER_URL, "t3://localhost:9001");
//与weblogic的console用户名密码一致
properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
properties.put(Context.SECURITY_CREDENTIALS, "weblogic");
//实例化上下文
Context ctx = new InitialContext(properties);
//获取连接工厂
QueueConnectionFactory queueFactory = (QueueConnectionFactory)ctx.lookup("jms/connFactory");
//根据连接工厂获取连接
QueueConnection queueConn = queueFactory.createQueueConnection();
//根据连接获取操作的session实例
QueueSession qSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
//通过上下文jndi查找配置的队列,我配置的队列名称及jndi名称均为 queueasd
Queue queue = (Queue)ctx.lookup("queueasd");
//通过session以及指定的队列实例化消息发送器
QueueSender queueSender = qSession.createSender(queue);
//打开连接
queueConn.start();
//测试用要发送的字符串
String s = "just test sending of jms under weblogic8!";
//转换为byte数组
byte[] bytes = s.getBytes();
int byteLength = bytes.length;
//通过session的createBytesMessage方法实例化一个jms识别的消息实体对象
BytesMessage bytesMessage = qSession.createBytesMessage();
//为这个message对象设置值
//设置消息的长度
bytesMessage.writeInt(byteLength);
//设置消息的内容
bytesMessage.writeBytes(bytes);
//发送消息
queueSender.send(bytesMessage);
} catch(Exception e ){
e.printStackTrace();
}
}
}
四、消息接收类
package com.javasd.jms;
import java.util.Properties;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class TestJmsReceive implements Job{
public static void main(String args[]) throws Exception {
try{
//quartz
SchedulerFactory schedFact=new StdSchedulerFactory();
Scheduler sched=schedFact.getScheduler();
sched.start();
JobDetail jobDetail=new JobDetail("a","b",TestJmsReceive.class);
jobDetail.getJobDataMap().put("name","lucy");
CronTrigger trigger=new CronTrigger("c","d");
trigger.setCronExpression("0/5 * * * * ? " ); // 启动之后立即执行 每一秒继续重复。
sched.scheduleJob(jobDetail, trigger);
} catch(Exception e){
}
}
public void execute(JobExecutionContext arg0) throws JobExecutionException {
//与sender中的定义一样,在实际应用中可以考虑单独讲这些设置为静态变量
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:9001");
properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
properties.put(Context.SECURITY_CREDENTIALS, "weblogic");
Context ctx = null;
QueueConnection qConn = null;
QueueConnectionFactory queueFactory = null;
QueueSession qSession = null;
Queue queue = null;
QueueReceiver qreceiver = null;
try {
ctx = new InitialContext(properties);
queueFactory = (QueueConnectionFactory)ctx.lookup("jms/connFactory");
qConn = queueFactory.createQueueConnection();
qSession = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queue = (Queue) ctx.lookup("queueasd");
//从这里开始与sender有差别
//用指定的队列构造Receiver
qreceiver = qSession.createReceiver(queue);
//为这个receiver设置监听器MessageListener,使用的内部类
qreceiver.setMessageListener(new MessageListener() {
public void onMessage(Message msg) {
//如果接收到的消息是byte类型的message,可以使text等类型,这个可以自己尝试
if(msg instanceof BytesMessage){
//转换为jms识别的消息对象
BytesMessage bytesMessage = (BytesMessage)msg;
try {
int length = bytesMessage.readInt();
byte[] bytes = new byte[length];
//获取传送过来的消息
bytesMessage.readBytes(bytes);
//将消息进行展现
String s = new String(bytes);
System.out.println(s);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
);
//开启连结进行监听
qConn.start();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
这样就完成了一个最基本的JMS消息发送以及接收的测试实例,在实际项目应用中项目组用到的jms对连接池以及多线程进行了优化,但是在应对实际情况的时候还是力不从心,不知大家怎么实现这个jms规范的亦或者是有更好的技术解决方案,望不吝赐教
- 大小: 54.8 KB
- 大小: 62 KB
分享到:
相关推荐
例如,一个繁忙的Web应用可以使用JMS队列来缓存用户的请求,然后在后台处理这些请求,从而提高系统的响应速度和可扩展性。 总的来说,JMS与WebLogic的结合提供了强大的消息传递能力,使得开发者能够构建健壮、灵活...
8. **保存并激活更改**:完成所有配置后,记得保存设置,并部署到目标WebLogic服务器实例或集群。 在文档"Start Weblogic创建jms服务器 20110126.doc"中,可能包含了上述步骤的详细指南,包括具体参数的设置和可能...
3. **创建队列和主题**:根据应用需求,创建JMS队列(Point-to-Point模型)或主题(Publish/Subscribe模型)。队列提供一对一的消息传递,而主题支持一对多的广播模式。 4. **配置JMS资源**:设置消息存储(例如,...
1. 登录WebLogic Console,选择你创建的服务器实例,进入JMS配置。 2. 创建一个新的JMS模块,定义目的地(如队列或主题)以及相关的JMS服务器和连接工厂。 3. 配置必要的安全设置,确保只有授权的应用程序能够访问...
1. **创建JMS模块**:在WebLogic管理控制台中,你需要创建一个新的JMS模块,它是一个容器,可以包含多个JMS资源,如队列(Queue)和主题(Topic)。 2. **定义JMS目标**:在模块内,你可以定义JMS目标,如队列或...
在WebLogic服务器上配置Java消息服务(JMS)是实现分布式消息传递的关键步骤,它允许应用程序在异步模式下交换数据。以下是详细配置JMS服务的步骤,涵盖了连接工厂、消息存储、JMS服务器以及消息目的地的配置。 1. ...
- 在Weblogic中,JMS资源如队列和主题通常在集群中配置,以实现高可用性和数据冗余。 - 创建JMS模块,包含所需的队列和主题。在Weblogic Console的“JMS”部分,创建JMS工厂、JMS资源,并选择集群作为目标。 - ...
Spring 整合 Weblogic JMS 实例详解 Spring 整合 Weblogic JMS 实例详解是指在 Spring 框架下整合 Weblogic JMS 服务器,以便在应用程序中使用 JMS messaging。这种整合方式可以提供高性能、可靠性和灵活性的消息...
WebLogic 11g JMS配置涉及创建JMS服务器、模块、连接工厂和队列,以便在企业级应用中实现消息传递。以下是对配置过程的详细说明: 1. **安装WebLogic 11g**:首先,需要安装Oracle WebLogic Server 11g,这通常包括...
在WebLogic中,“域”是管理和配置WebLogic Server实例、集群、数据源、JMS队列等各种服务和资源的基本单位。本文将深入探讨WebLogic Server的域配置。 一、域的概念 在WebLogic中,一个域包含一个或多个服务器实例...
本篇文章将详细阐述如何在 WebLogic 中构建 JMS 服务,包括创建 JMS 服务器、JMS 模块、子部署以及配置资源如连接工厂和队列。 首先,我们来创建 JMS 服务器。在 WebLogic 的管理控制台中,导航到 "服务" -> "消息...
4. 集群内资源同步:设置集群间共享的JMS队列和主题,以及数据源等资源。 三、WebLogic Server命令行工具 1. `wlst`(WebLogic Scripting Tool):基于Python的命令行工具,用于脚本化地执行WebLogic Server的管理...
1. **数据源和JMS队列的共享**:在集群环境中,数据源和JMS队列可以被所有实例共享,保证了数据的一致性和高可用性。 2. **安全管理**:WebLogic集群支持集中式的安全管理,可以统一配置用户、角色和权限,确保整个...
1. **配置资源属性**:如JDBC数据源、JMS队列和话题、EJB等。 2. **部署应用和组件**:将应用程序和模块部署到服务器或集群。 3. **监控资源使用**:查看服务器性能指标,如CPU、内存使用情况。 4. **查看日志信息**...
在向导的高级配置阶段,你可以设置数据源(JDBC)和消息队列(JMS)资源。数据源是WebLogic连接数据库的接口,而JMS则用于实现异步通信和消息传递。 **7. 完成配置并启动服务器** 最后,确认所有配置信息无误后,...
【WebLogic配置详解】 WebLogic是由Oracle公司提供的一个企业级应用服务器,它是基于Java的中间件,用于构建、...在实际工作中,还可以配置更多的高级特性,如集群、数据源、JMS队列等,以满足复杂的企业级应用需求。
在本文中,我们将深入探讨如何进行`weblogic9-jms-applet`的开发,涵盖从Applet的基础知识到WebLogic 9.2的JMS配置,以及相关注意事项和一个简单的JNI实例。让我们逐步解析这个过程。 **1. Applet基础问题** ...
6. **数据源与JMS队列**:确保集群内的数据源和JMS队列配置为全局资源,以便在所有服务器实例间共享。 7. **集群部署**:应用部署至集群时,需选择“集群部署”,这样应用会同时部署到集群中的所有服务器上。 接...
总的来说,WebLogic中的JMS配置是一项关键任务,它确保了基于消息的通信能够在分布式环境中有效地进行。正确配置JMS服务器、模块、连接工厂和队列能够为应用程序提供可靠、高效的异步通信机制。在实际操作中,应根据...