好久没写博客了,突然有种想法,把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. **UrlRewriteFilter**: 这是一个非常流行的开源Java过滤器,它可以集成到任何基于Servlet的Web应用中,包括SS3EX框架。它负责解析请求的URL,根据配置文件中的规则进行重写。 2. **规则定义**: 在`urlrewrite....
总结来说,这个项目是关于将ss3ex转换成一个支持Maven的Java项目,便于管理和构建,同时也可能提供了一种工具,帮助开发者在他们的工作中更高效地使用或集成ss3ex。通过博客链接提供的信息,读者可以深入了解这个...
文件列表中的"ss3ex.bmp"可能是一个项目标识或图标,它可能包含了项目的视觉元素,帮助识别项目。而"ss3ex"可能是项目的主干代码或者扩展模块,包含了对SpringSide3核心功能的增强和定制。 这个项目的源代码分析,...
2007卡耐基软件工程网路教材 SSD3ex2答案
ssd3ex5源码,自己写的,保证100分!
博客链接(https://ss3ex.iteye.com/blog/436901)可能包含了关于如何在Maven项目中集成和配置iBatis的实践教程,读者可以通过阅读该博客获取更具体的步骤和示例代码。 综上所述,"maven版ibatis"的主题涵盖了Maven...
此外,小巧的体积允许磁带库被集成到普通机箱中,便于管理和维护,提升了数据的安全性。 3. **无缝兼容性**: AIT-3Ex的一大优点在于其良好的前后兼容性。它可以与前代的Sony AIT-2产品兼容,这意味着科罗拉多盲人...
描述中提到的“源代码”表明该压缩包可能包含了用于教学目的的Java编程代码,这通常是为了实现特定的SSD管理功能或者进行性能测试。 在标签中,“SSD3”可能是课程的代号,而“JAVA”则指明了编程语言,这意味着...
Sizzle 是一套前端用智能来处理模块和组件依赖关系的框架。 它遵循 CommonJS 的运行规范来完成对各个模块的动态加载。...Sizzle 框架将被使用在 PJBlog4 新版本中,让后台更加代码逻辑化和模块化。
在这个示例中,使用了名为`libZPlay`的库来实现这一功能。`libZPlay`是一个开源的跨平台库,它提供了音频播放、解码和处理的能力,同时也支持读取MP3文件的ID3标签。 ID3标签是附加在MP3文件中的元数据标准,用于...
在MATLAB开发中,利用MATLAB解题是一种高效且强大的工具,尤其在图像处理与计算机视觉领域。MATLAB以其简洁的语法和丰富的内置函数库,为科学家和工程师提供了便利的平台来解决各种复杂的数学问题。以下是一些基于...
派特莱LCE-A 多层信号灯2D CAD Pole M2pdf,特点:高节能无需维护的LED多层信号灯,体积小可识别性强,特别匹配于各类中小型设备的外观设计。派特莱特有的混合棱镜切割灯罩,消除了可能存在的视觉盲点,大大提高了远...
这些图表提供了MIP2G7MD的内部结构及如何将其集成到实际电路中的指导。 通过以上信息,我们可以了解到MIP2G7MD电源模块不仅在技术层面具有先进的性能指标,而且在实际应用方面也展现出了广泛的适用性和灵活性。这...
随着现代电子产品的复杂性和集成度不断提高,FPGA、ARM、DSP等高性能芯片的电源管理也变得越来越复杂。这些芯片通常需要多种不同电压等级的电源供电,例如内核电压(如90nm工艺下的1.2V或130nm工艺下的1.8V)、辅助...
2. **适用**:此协议适用于所有使用HBP-9021/9020的通信场景,无论是在设备的开发阶段还是实际操作过程中。 3. **连接构成**:在PC与主CPU进行通信时,它们通过RS232C串行通信端口相连,具体是通过UART接口的TxD...
3. **期望(数学期望)**(Expectation):随机变量的期望表示其平均值,如第4题中的EX=,第9题中的EX=np=1.6,第13题中的E(z)=3EX-2。 4. **方差(Variance)**:随机变量的方差衡量其数值离散程度,如第4题中的DX...