`
san586
  • 浏览: 134731 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ss3ex中集成JMS实现异步处理逻辑

阅读更多
好久没写博客了,突然有种想法,把ss3ex实现为异步处理框架,没有什么高级的,我在群里问了些人,没有得到答案,白衣说他来实现,我把我自己的想法写出来,主要是想获得些建议。我心中实现异步框架的步骤是:

    [1]实现annotation标签的声明,如:@Async

/**  
	 * 方法异步  
	 * @author 三上  
	 */  
	@Retention(RetentionPolicy.RUNTIME)   
	@Target( {ElementType.METHOD })   
	@Documented  
	public @interface Async   
	{   
	    //异步队列名称,默认为类名.方法名   
	    String asyncName() default "";   
	    //使用Queue 还是一个 Topic,默认为Queue   
	    boolean jmsAsync() default false;   
	}  


    [2]实现JMS(这个上个月基本实现了,就是本文将要写的内容)

    [3]写切面,AOP中的pointcut可以这么写了@annotation(async)"


    [4]在需要异步的方法上加个@Async标签声明就可以了。

以上步骤不知道能不能实现,先写着,等大伙的意见。
ss3ex中集成JMS,步骤如下:

    [1]下载ActiveMQ5.2,解压后什么也不要改,就直接运行apache-activemq-5.2.0\bin\activemq.bat文件;

    [2]在ss3ex中导入activemq的相关类文件,且在resources目录下添加spring-jms.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
http://www.springframework.org/schema/jms    
http://www.springframework.org/schema/jms/spring-jms-2.5.xsd">

	<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="tcp://localhost:61616" />
	</bean>
	<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg value="Huzl.queue"></constructor-arg>
	</bean>

	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="connectionFactory" />
		<property name="defaultDestination" ref="queueDestination" />
	</bean>
	<bean id="taskExecutor"
		class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor ">
		<property name="corePoolSize" value="5" />
		<property name="maxPoolSize" value="10" />
	</bean>

	<jms:listener-container connection-factory="connectionFactory"
		task-executor="taskExecutor" concurrency="10" acknowledge="transacted">
		<jms:listener destination="Huzl.queue" ref="jmsService"
			method="receive" />
	</jms:listener-container>

</beans>


    [3]写发送和接受消息的JmsService类,内容如下:
package com.service.jms;

import java.io.Serializable;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

/**
 * JMS service
 */
@Component(value = "jmsService")
public class JmsService {
	@Autowired
	private JmsTemplate jmsTemplate;

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}

	public void sendString(final String text) {
		System.out.println("---Send:" + text);
		jmsTemplate.send(new MessageCreator() {
			public Message createMessage(Session arg0) throws JMSException {
				return arg0.createTextMessage(text);
			}
		});
	}

	public void sendObject(final Serializable obj) {
		System.out.println("---Send:" + obj);
		jmsTemplate.send(new MessageCreator() {
			public Message createMessage(Session arg0) throws JMSException {
				return arg0.createObjectMessage(obj);
			}
		});
	}

	public void receive(String msg) {
		System.out.println("receive:" + msg);
	}

	public void receive(Serializable msg) {
		Object obj = (Object) msg;
		System.out.println("receive:" + obj);
	}

}



    [4]在某个页面方法中调用方法sendString或者sendObject,比如:

@Autowired
private JmsService jmsService;
public void setJmsService(JmsService jmsService) {
this.jmsService = jmsService;
}
jmsService.sendString("sanshang");

    [5]启动ss3ex,运行,控制台就会打印出信息。
分享到:
评论
1 楼 crabboy 2009-05-21  
三上,有源码?

相关推荐

    ss3ex中使用UrlRewrite

    1. **UrlRewriteFilter**: 这是一个非常流行的开源Java过滤器,它可以集成到任何基于Servlet的Web应用中,包括SS3EX框架。它负责解析请求的URL,根据配置文件中的规则进行重写。 2. **规则定义**: 在`urlrewrite....

    发布ss3ex的maven版本,取名叫sango吧

    总结来说,这个项目是关于将ss3ex转换成一个支持Maven的Java项目,便于管理和构建,同时也可能提供了一种工具,帮助开发者在他们的工作中更高效地使用或集成ss3ex。通过博客链接提供的信息,读者可以深入了解这个...

    springside3+ext源代码

    文件列表中的"ss3ex.bmp"可能是一个项目标识或图标,它可能包含了项目的视觉元素,帮助识别项目。而"ss3ex"可能是项目的主干代码或者扩展模块,包含了对SpringSide3核心功能的增强和定制。 这个项目的源代码分析,...

    SSD3ex2答案

    2007卡耐基软件工程网路教材 SSD3ex2答案

    ssd3ex5练习5

    ssd3ex5源码,自己写的,保证100分!

    maven版ibatis

    博客链接(https://ss3ex.iteye.com/blog/436901)可能包含了关于如何在Maven项目中集成和配置iBatis的实践教程,读者可以通过阅读该博客获取更具体的步骤和示例代码。 综上所述,"maven版ibatis"的主题涵盖了Maven...

    AIT存储助力盲人护助中心数据保护成功应用案例

    此外,小巧的体积允许磁带库被集成到普通机箱中,便于管理和维护,提升了数据的安全性。 3. **无缝兼容性**: AIT-3Ex的一大优点在于其良好的前后兼容性。它可以与前代的Sony AIT-2产品兼容,这意味着科罗拉多盲人...

    SSD3 EX1-7

    描述中提到的“源代码”表明该压缩包可能包含了用于教学目的的Java编程代码,这通常是为了实现特定的SSD管理功能或者进行性能测试。 在标签中,“SSD3”可能是课程的代号,而“JAVA”则指明了编程语言,这意味着...

    Sizzle v4.0.0.59

    Sizzle 是一套前端用智能来处理模块和组件依赖关系的框架。 它遵循 CommonJS 的运行规范来完成对各个模块的动态加载。...Sizzle 框架将被使用在 PJBlog4 新版本中,让后台更加代码逻辑化和模块化。

    C++实现显示MP3文件信息的方法

    在这个示例中,使用了名为`libZPlay`的库来实现这一功能。`libZPlay`是一个开源的跨平台库,它提供了音频播放、解码和处理的能力,同时也支持读取MP3文件的ID3标签。 ID3标签是附加在MP3文件中的元数据标准,用于...

    matlab开发-用matlab解题

    在MATLAB开发中,利用MATLAB解题是一种高效且强大的工具,尤其在图像处理与计算机视觉领域。MATLAB以其简洁的语法和丰富的内置函数库,为科学家和工程师提供了便利的平台来解决各种复杂的数学问题。以下是一些基于...

    派特莱LCE-A 多层信号灯2D CAD Pole M2.pdf

    派特莱LCE-A 多层信号灯2D CAD Pole M2pdf,特点:高节能无需维护的LED多层信号灯,体积小可识别性强,特别匹配于各类中小型设备的外观设计。派特莱特有的混合棱镜切割灯罩,消除了可能存在的视觉盲点,大大提高了远...

    MIP2G7MD电源模块图

    这些图表提供了MIP2G7MD的内部结构及如何将其集成到实际电路中的指导。 通过以上信息,我们可以了解到MIP2G7MD电源模块不仅在技术层面具有先进的性能指标,而且在实际应用方面也展现出了广泛的适用性和灵活性。这...

    Allegro电源和地

    随着现代电子产品的复杂性和集成度不断提高,FPGA、ARM、DSP等高性能芯片的电源管理也变得越来越复杂。这些芯片通常需要多种不同电压等级的电源供电,例如内核电压(如90nm工艺下的1.2V或130nm工艺下的1.8V)、辅助...

    新健太郎通信协议(中文) - 副本1

    2. **适用**:此协议适用于所有使用HBP-9021/9020的通信场景,无论是在设备的开发阶段还是实际操作过程中。 3. **连接构成**:在PC与主CPU进行通信时,它们通过RS232C串行通信端口相连,具体是通过UART接口的TxD...

    练习二(龙版)答案.doc

    3. **期望(数学期望)**(Expectation):随机变量的期望表示其平均值,如第4题中的EX=,第9题中的EX=np=1.6,第13题中的E(z)=3EX-2。 4. **方差(Variance)**:随机变量的方差衡量其数值离散程度,如第4题中的DX...

Global site tag (gtag.js) - Google Analytics