import java.util.Date;
import java.util.HashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.Message;
import org.springframework.integration.jms.JmsSendingMessageHandler;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.transaction.annotation.Transactional;
@SuppressWarnings({"rawtypes", "unchecked"})
public class JmsSenderService extends JmsSendingMessageHandler {
private final static Logger LOG = LoggerFactory.getLogger(JmsSenderService.class);
private final static int Default_RetryTime = 3;
@Autowired
private JobControlRepository jobControlRepository;
private int retryTimes = Default_RetryTime;
private String jobID;
public JmsSenderService(JmsTemplate jmsTemplate) {
super(jmsTemplate);
}
public void send(Message message) {
if (message == null || message.getPayload() == null) {
return;
}
Message<String> jmsMessage = buildJmsMessage(message);
if (jmsMessage == null) {
return;
}
HashMap<String, String> msgMap = (HashMap) message.getPayload();
String messageId = msgMap.get(JMS_MESSAGE_ID);
if (LOG.isInfoEnabled()) {
LOG.info("Start to send messages to MQ Server, MessageID:" + messageId);
}
int retriedCount = 0;
do {
try {
super.handleMessageInternal(jmsMessage);
updateDatabaseForSendSuccessfully(messageId);
if (LOG.isInfoEnabled()) {
LOG.info("Send message to MQ Server successfuly, MessageID:" + messageId);
}
return;
}
catch (Exception e) {
retriedCount++;
}
} while (retriedCount >= retryTimes);
handleSendFailure(messageId);
}
private Message<String> buildJmsMessage(Message message) {
HashMap<String, String> map = (HashMap) message.getPayload();
String content = (String) map.get(JMS_CONTENT);
if (content == null || "".equals(content)) {
return null;
}
Message<String> jmsMessage = MessageBuilder.withPayload(content).build();
return jmsMessage;
}
protected void updateDatabaseForSendFailure(String messageId) {
}
protected void updateDatabaseForSendSuccessfully(String messageId) {
}
private void handleSendFailure(String messageId) {
LOG.error("Send message to MQ Server failed, MessageID: " + messageId + ", JobID:" + jobID);
stopJob();
updateDatabaseForSendFailure(messageId);
}
@Transactional
private void stopJob() {
JobControl jobControl = jobControlRepository.findOne(jobID);
if (jobControl != null) {
jobControl.setStatus(DISABLE);
jobControl.setUpdateOn(new Date());
jobControl.setUpdateBy("system");
jobControlRepository.save(jobControl);
}
}
public int getRetryTimes() {
return retryTimes;
}
public void setRetryTimes(int retryTimes) {
this.retryTimes = retryTimes;
}
public String getJobID() {
return jobID;
}
public void setJobID(String jobID) {
this.jobID = jobID;
}
}
分享到:
相关推荐
Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务。本例通过activeMQ服务器模拟了消息的发送与接收。需要注意的是,activeMQ的运行依赖jdk的环境,而且对jdk的版本也有要求,我用的是jdk1.6+...
基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,实现消息服务的基本功能:发送与接收。Spring对JMS提供了很好的支持,可以...
spring-jmsspring-jmsspring-jmsspring-jmsspring-jmsspring-jms
赠送jar包:spring-jms-4.3.12.RELEASE.jar; 赠送原API文档:spring-jms-4.3.12.RELEASE-javadoc.jar; 赠送源代码:spring-jms-4.3.12.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-jms-4.3.12.RELEASE....
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...
jms简单demo,activemq集成spring和不集成
赠送jar包:spring-jms-4.3.20.RELEASE.jar; 赠送原API文档:spring-jms-4.3.20.RELEASE-javadoc.jar; 赠送源代码:spring-jms-4.3.20.RELEASE-sources.jar; 包含翻译后的API文档:spring-jms-4.3.20.RELEASE-...
赠送jar包:spring-jms-4.3.20.RELEASE.jar 赠送原API文档:spring-jms-4.3.20.RELEASE-javadoc.jar 赠送源代码:spring-jms-4.3.20.RELEASE-sources.jar 包含翻译后的API文档:spring-jms-4.3.20.RELEASE-...
spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar spring-jms-4.0.0.RELEASE.jar
spring_jms是基于Maven+Spring+JMS+Active入门级实例.
spring-jms-5.0.4.RELEASE.jar ;spring-jms-5.0.4.RELEASE.jar
春天-jms-demo 在制品
Spring Cloud 各组件Demo ,包含 Spring Cloud Eureka ,Spring Cloud Zuul , Spring Cloud Ribbon , Hystrix-Dashboard-Turbine 如有错误 ,请于本人联系 ,自会及时修改 , 防止误导他人
spring-boot-demospring-boot-demospring-boot-demospring-boot-demospring-boot-demospring-boot-demo
spring-jms入门
spring-jms-3.1.1.RELEASE.jar
spring-jms-4.1.4,Spring提供的JMS工具类,它发送、接收消息
利用maven构建的spring4.0框架的demo
springmvc spring hibernate整合Demo 包含了CRUD 帮助初学者快速学习springmvc
Spring bean生命周期demo