`

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

分享到:
评论

相关推荐

    ActiveMQ与Spring整合示例Demo

    其中,`MessageListener`是自定义的消息监听器,实现了`javax.jms.MessageListener`接口,用于处理接收到的消息。 **三、发送和接收消息** 1. **发送消息** 使用`JmsTemplate`的`send`方法发送消息到指定的队列或...

    Spring 集成Java消息服务

    在IT行业中,Spring框架是Java开发...通过学习这个Demo,你可以理解如何在实际项目中实现Spring与JMS的整合,从而实现可靠、高效的消息传递。这有助于提高系统的可扩展性和健壮性,特别是在高并发和大数据量的场景下。

    activemq+spring demo 简单示例

    `ActiveMQ`是Apache软件基金会的一个项目,它是一个功能强大的消息代理,实现了多种消息协议,如JMS(Java Message Service),使得应用程序能够进行异步通信。而`Spring`则是一个全面的企业级应用框架,提供了依赖...

    activeMQjava的简单demo例子

    这个简单的ActiveMQ Java demo例子不仅帮助我们理解如何在Java应用中使用ActiveMQ,还展示了Spring JMS的便利性。在实际开发中,你可以根据项目需求,利用ActiveMQ实现消息的持久化、消息确认、消息分发策略(如负载...

    springboot与activemq结合以及mq延迟demo

    而ActiveMQ是Apache软件基金会开源的JMS(Java Message Service)实现,提供可靠的消息传递服务,支持多种协议,并且可以在分布式环境中运行。 要将Spring Boot与ActiveMQ结合,首先需要在Spring Boot项目中添加...

    active-demo:ActiveMQ + Spring 整合

    为了发送消息,你可以创建一个Spring JMS模板 bean,并在需要的地方调用其`send`方法: ```xml &lt;bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"&gt; ``` 在Java代码中,注入`...

    activemq安装包与demo

    Apache ActiveMQ 是一个流行的开源消息代理,它实现了 Java Message Service (JMS) 规范,允许应用程序之间进行异步通信。在本教程中,我们将详细介绍如何安装 ActiveMQ,以及如何使用 JMS 进行开发,包括点对点...

    SpringBoot集成ActiveMQ代码.zip

    public void send(String queueName, String message) { jmsTemplate.convertAndSend(queueName, message); } } ``` `jmsTemplate`是Spring提供的JMS操作模板,`convertAndSend`方法用于将对象转换为消息并发送到...

    ActiveMQ学习

    producer.send(message); // 关闭会话和连接 session.close(); connection.close(); } } ``` 接收端(QueueReceiver): ```java import javax.jms.*; public class QueueReceiver { public static void ...

    active mq 学习笔记

    producer.send(message); session.close(); connection.close(); } } ``` - **接收端代码示例**:同样通过`ActiveMQConnectionFactory`创建连接工厂,之后创建连接、会话、消息消费者,接收消息后关闭会话和...

Global site tag (gtag.js) - Google Analytics