MQ操作
package com.hm.wll.task;
import com.alibaba.fastjson.JSON;
import com.hm.wll.service.AssayRiskService;
import com.hm.wll.service.RealTimeDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
@Configuration
@EnableScheduling
public class MqTask {
@Value("${aciiveMq.topic}")
private String mqTopic;
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private ConnectionFactory connectionFactory;
@Scheduled(cron = "0/3 * * * * ?")
public void pushMqWellList() {
System.out.println("mq开始时间" + new Date());
try {
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(mqTopic);
//MessageProducer producer = session.createProducer(destination);
//获取数据
List<Map<String, Object>> mapList = realTimeDataService.getDataList();
String dataInfo = JSON.toJSONString(mapList);
TextMessage message = session.createTextMessage(dataInfo);
// 半小时过期
//message.setJMSExpiration(1800000);
jmsTemplate.convertAndSend(destination, message.getText());
//System.out.println("mq" + message.getText());
//producer.send(message);
session.close();
} catch (Exception e) {
e.printStackTrace();
log.error("发送消息>>>>>>>>" + e);
}
System.out.println("mq结束时间" + new Date());
}
}
package com.test.wl.config;
import lombok.Data;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
/**使用spring注入的方式发送mq,减少连接压力
* @author 苹果
*/
@Configuration
@EnableJms
@Data
public class JmsConfig {
@Value("${aciiveMq.topicStuck}")
private String topicStuck ;
@Value("${aciiveMq.url}")
private String mqUrl;
@Value("${aciiveMq.userName}")
private String userName;
@Value("${aciiveMq.password}")
private String password;
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
return new JmsTemplate(connectionFactory);
}
@Bean
public ConnectionFactory connectionFactory() {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, password, mqUrl);
return connectionFactory;
}
}
此处只展示通过bean获取jmsTemplate ,如果不被sping管理的类需要注入可以通过这种方式获取,否则在此类中直接写private String topic=“主题”这种方式的话报错(没有加配置类注解的)
public void mqCont(String recCache) {
JmsTemplate jmsTemplate = SpringUtil.getBean(JmsTemplate.class);
ConnectionFactory connectionFactory = SpringUtil.getBean(ConnectionFactory.class);
MQConfig bean = SpringUtil.getBean(MQConfig.class);
try {
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(bean.getMqTopicata());
TextMessage message = session.createTextMessage(String.valueOf(recCache));
// 半小时过期
//message.setJMSExpiration(1800000);
jmsTemplate.convertAndSend(destination, message.getText());
String text = message.getText();
// StaticLog.info("输出text文本:"+ text);
// System.out.println("mq" + message.getText());
//producer.send(message);
session.close();
// ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, password, mqUrl);
// StaticLog.info("连接connectionFactory");
// Connection connection = connectionFactory.createConnection();
// connection.start();
// Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Destination destination = session.createTopic(mqTopicBigData);
// MessageProducer producer = session.createProducer(destination);
// TextMessage message = session.createTextMessage(String.valueOf(recCache));
String text = message.getText();
StaticLog.info("输出text文本:"+text);
// producer.send(message);
// session.close();
} catch (Exception e) {
e.printStackTrace();
StaticLog.info("抛出mq日常");
}
}