`
elfasd
  • 浏览: 100262 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Weblogic8的JMS队列实例配置

    博客分类:
  • JMS
阅读更多

预计达成目标: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...”,在新页面中输入NameJNDI 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
1
1
分享到:
评论

相关推荐

    JMS经典实例 基于weblogic

    例如,一个繁忙的Web应用可以使用JMS队列来缓存用户的请求,然后在后台处理这些请求,从而提高系统的响应速度和可扩展性。 总的来说,JMS与WebLogic的结合提供了强大的消息传递能力,使得开发者能够构建健壮、灵活...

    Weblogic创建JMS服务器

    8. **保存并激活更改**:完成所有配置后,记得保存设置,并部署到目标WebLogic服务器实例或集群。 在文档"Start Weblogic创建jms服务器 20110126.doc"中,可能包含了上述步骤的详细指南,包括具体参数的设置和可能...

    JMS入门小例子以及weblogic安装,并且在weblogic中配置JMS服务

    3. **创建队列和主题**:根据应用需求,创建JMS队列(Point-to-Point模型)或主题(Publish/Subscribe模型)。队列提供一对一的消息传递,而主题支持一对多的广播模式。 4. **配置JMS资源**:设置消息存储(例如,...

    weblogic与jms+spring

    1. 登录WebLogic Console,选择你创建的服务器实例,进入JMS配置。 2. 创建一个新的JMS模块,定义目的地(如队列或主题)以及相关的JMS服务器和连接工厂。 3. 配置必要的安全设置,确保只有授权的应用程序能够访问...

    WebLogic 11g JMS图文配置 和 详细的示例代码

    1. **创建JMS模块**:在WebLogic管理控制台中,你需要创建一个新的JMS模块,它是一个容器,可以包含多个JMS资源,如队列(Queue)和主题(Topic)。 2. **定义JMS目标**:在模块内,你可以定义JMS目标,如队列或...

    在Weblogic上配置JMS服务的方法

    在WebLogic服务器上配置Java消息服务(JMS)是实现分布式消息传递的关键步骤,它允许应用程序在异步模式下交换数据。以下是详细配置JMS服务的步骤,涵盖了连接工厂、消息存储、JMS服务器以及消息目的地的配置。 1. ...

    Linux环境Weblogic集群配置,Weblogic JMS集群配置

    - 在Weblogic中,JMS资源如队列和主题通常在集群中配置,以实现高可用性和数据冗余。 - 创建JMS模块,包含所需的队列和主题。在Weblogic Console的“JMS”部分,创建JMS工厂、JMS资源,并选择集群作为目标。 - ...

    Spring整合Weblogic jms实例详解

    Spring 整合 Weblogic JMS 实例详解 Spring 整合 Weblogic JMS 实例详解是指在 Spring 框架下整合 Weblogic JMS 服务器,以便在应用程序中使用 JMS messaging。这种整合方式可以提供高性能、可靠性和灵活性的消息...

    weblogic11g JMS配置及PTP小测试

    WebLogic 11g JMS配置涉及创建JMS服务器、模块、连接工厂和队列,以便在企业级应用中实现消息传递。以下是对配置过程的详细说明: 1. **安装WebLogic 11g**:首先,需要安装Oracle WebLogic Server 11g,这通常包括...

    weblogic 了解域配置

    在WebLogic中,“域”是管理和配置WebLogic Server实例、集群、数据源、JMS队列等各种服务和资源的基本单位。本文将深入探讨WebLogic Server的域配置。 一、域的概念 在WebLogic中,一个域包含一个或多个服务器实例...

    weblogic构建jms服务.docx

    本篇文章将详细阐述如何在 WebLogic 中构建 JMS 服务,包括创建 JMS 服务器、JMS 模块、子部署以及配置资源如连接工厂和队列。 首先,我们来创建 JMS 服务器。在 WebLogic 的管理控制台中,导航到 "服务" -> "消息...

    weblogic 详细配置手册

    4. 集群内资源同步:设置集群间共享的JMS队列和主题,以及数据源等资源。 三、WebLogic Server命令行工具 1. `wlst`(WebLogic Scripting Tool):基于Python的命令行工具,用于脚本化地执行WebLogic Server的管理...

    weblogic集群配置与部署

    1. **数据源和JMS队列的共享**:在集群环境中,数据源和JMS队列可以被所有实例共享,保证了数据的一致性和高可用性。 2. **安全管理**:WebLogic集群支持集中式的安全管理,可以统一配置用户、角色和权限,确保整个...

    WebLogic_Server安装和配置

    1. **配置资源属性**:如JDBC数据源、JMS队列和话题、EJB等。 2. **部署应用和组件**:将应用程序和模块部署到服务器或集群。 3. **监控资源使用**:查看服务器性能指标,如CPU、内存使用情况。 4. **查看日志信息**...

    weblogic的配置向导

    在向导的高级配置阶段,你可以设置数据源(JDBC)和消息队列(JMS)资源。数据源是WebLogic连接数据库的接口,而JMS则用于实现异步通信和消息传递。 **7. 完成配置并启动服务器** 最后,确认所有配置信息无误后,...

    weblogic 的配置详解

    【WebLogic配置详解】 WebLogic是由Oracle公司提供的一个企业级应用服务器,它是基于Java的中间件,用于构建、...在实际工作中,还可以配置更多的高级特性,如集群、数据源、JMS队列等,以满足复杂的企业级应用需求。

    weblogic9-jms-applet 开发全过程和代码

    在本文中,我们将深入探讨如何进行`weblogic9-jms-applet`的开发,涵盖从Applet的基础知识到WebLogic 9.2的JMS配置,以及相关注意事项和一个简单的JNI实例。让我们逐步解析这个过程。 **1. Applet基础问题** ...

    WebLogic11G集群配置+apache安装及配置转发

    6. **数据源与JMS队列**:确保集群内的数据源和JMS队列配置为全局资源,以便在所有服务器实例间共享。 7. **集群部署**:应用部署至集群时,需选择“集群部署”,这样应用会同时部署到集群中的所有服务器上。 接...

    JMS配置文档

    总的来说,WebLogic中的JMS配置是一项关键任务,它确保了基于消息的通信能够在分布式环境中有效地进行。正确配置JMS服务器、模块、连接工厂和队列能够为应用程序提供可靠、高效的异步通信机制。在实际操作中,应根据...

Global site tag (gtag.js) - Google Analytics