applicationContext.xml 配置项目启动时就同步RocketMQ
<!--RocketMQ生产者-->
<bean id="producer" class="com.tianchengsoft.rocketmq.Producer"
init-method="init" scope="singleton">
<property name="producerGroup" value="******"/>
<property name="namesrvAddr" value="****"/>
</bean>
Producer.class 工具类
package com.tianchengsoft.rocketmq;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.tianchengsoft.service.OrderService;
import org.apache.log4j.Logger;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Component
public class Producer {
private static final Logger logger = Logger.getLogger(Producer.class);//记录日志
private DefaultMQProducer defaultMQProducer;
private String producerGroup;
private String namesrvAddr;
@Resource
private OrderService orderService;
private final Integer user_module = 505;
/**
* 初始化
*
* @throws MQClientException
*/
public void init() {
String msgContent = "";
try {
List<Map<String, Object>> orderReturnList = orderService.findOrderDetails();//得到要回传的订单数据
if (orderReturnList != null && orderReturnList.size() > 0) {
defaultMQProducer = new DefaultMQProducer("****");//producerGroup
defaultMQProducer.setNamesrvAddr("***");//namesrvAddr
defaultMQProducer.setInstanceName(String.valueOf(System
.currentTimeMillis()));
defaultMQProducer.start();
msgContent = JSON.toJSONString(orderReturnList);
System.out.println("订单回传参数:" + msgContent);
Message msg = new Message("****" /* 主题 */,
"***" /* 表名 */,
"t_order_test"/* 内容 */,
(msgContent).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */);
SendResult sendResult = defaultMQProducer.send(msg);
System.out.printf("%s%n", sendResult);
if (sendResult.getSendStatus() == SendStatus.SEND_OK) {
orderService.updateOrderReturnSuccess();
}
}
} catch (Exception e) {
System.out.println(e);
logger.info("订单回传:" + msgContent);
}
System.out.println("DefaultMQProudcer start success!");
}
/**
* 执行销毁
*/
public void destroy() {
defaultMQProducer.shutdown();
}
public DefaultMQProducer getDefaultMQProducer() {
return defaultMQProducer;
}
public void setDefaultMQProducer(DefaultMQProducer defaultMQProducer) {
this.defaultMQProducer = defaultMQProducer;
}
public String getProducerGroup() {
return producerGroup;
}
public void setProducerGroup(String producerGroup) {
this.producerGroup = producerGroup;
}
public String getNamesrvAddr() {
return namesrvAddr;
}
public void setNamesrvAddr(String namesrvAddr) {
this.namesrvAddr = namesrvAddr;
}
}
定时器代码 OrderReturnTask
package com.tianchengsoft.utils.task;
import com.tianchengsoft.rocketmq.Producer;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.stereotype.Component;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Properties;
@Component
public class OrderReturnTask {
@Resource
private Producer producer;
// @Scheduled(cron = "0/5 * * * * ?")
/**
* 每间隔1个小时执行一次
*/
@Scheduled(cron = "0 0 * * * ?")
public void orderReturnTask() {
Properties properties = null;
try {
properties = PropertiesLoaderUtils.loadAllProperties("timedTask.properties");//获取配置文件
String timedTask = properties.getProperty("timedTask");
//判断定时器是否开启
if("true".equals(timedTask)){
producer.init();
producer.destroy();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
pom.xml代码
<!--RocketMQ--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>${rocketmq-client.version}</version> </dependency>