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

好久没写博客了,突然有种想法,把ss3ex实现为异步处理框架,没有什么高级的,我在群里问了些人,没有得到答案,白衣说他来实现,我把我自己的想法写出来,主要是想获得些建议。我心中实现异步框架的步骤是:[list]
[1]实现annotation标签的声明,如:@Async
[/list]
/**  
* 方法异步
* @author 三上
*/
@Retention(RetentionPolicy.RUNTIME)
@Target( {ElementType.METHOD })
@Documented
public @interface Async
{
//异步队列名称,默认为类名.方法名
String asyncName() default "";
//使用Queue 还是一个 Topic,默认为Queue
boolean jmsAsync() default false;
}

[list]
[2]实现JMS(这个上个月基本实现了,就是本文将要写的内容)
[/list][list]
[3]写切面,AOP中的pointcut可以这么写了@annotation(async)"
[/list]
[list]
[4]在需要异步的方法上加个@Async标签声明就可以了。
[/list]
以上步骤不知道能不能实现,先写着,等大伙的意见。
ss3ex中集成JMS,步骤如下:
[list]
[1]下载ActiveMQ5.2,解压后什么也不要改,就直接运行apache-activemq-5.2.0\bin\activemq.bat文件;
[/list][list]
[2]在ss3ex中导入activemq的相关类文件,且在resources目录下添加spring-jms.xml文件,内容如下:
[/list]
<?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>

[list]
[3]写发送和接受消息的JmsService类,内容如下:
[/list]

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);
}

}


[list]
[4]在某个页面方法中调用方法sendString或者sendObject,比如:
[/list]
@Autowired
private JmsService jmsService;
public void setJmsService(JmsService jmsService) {
this.jmsService = jmsService;
}
jmsService.sendString("sanshang");
[list]
[5]启动ss3ex,运行,控制台就会打印出信息。
[/list]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值