spring send JMS message demo



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值