MQ直连 并通过线程池ExecutorService发送消息

来源:互联网 发布:windows热键设置 编辑:程序博客网 时间:2024/06/05 19:56
</pre><p></p><p>发送MQ的消息代码段 ,MQ的消息格式代码就不贴了。线程池是通过ExecutorService来实现。</p><pre name="code" class="java">import java.io.IOException;import java.io.InputStream;import java.util.Arrays;import java.util.Properties;import javax.jms.Connection;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Queue;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.log4j.Logger;import com.ibm.mq.jms.JMSC;import com.ibm.mq.jms.MQQueueConnectionFactory;public class MQSender {private static Logger log = Logger.getLogger(MQSender.class);privatestatic String hostName;private static String channel;private static int CCSID;private static int port;private static String qmName;private static String qName;private static Session session;private static Connection connection;private static Queue destination;static {Properties prop = new Properties();InputStream in = Object.class.getResourceAsStream("/mq.properties");try {prop.load(in);hostName = prop.getProperty("mq.host"); // MQ服务器的IP地址channel = prop.getProperty("mq.channel"); // MQ服务器连接的通道CCSID = Integer.getInteger(prop.getProperty("mq.ccsid")); // MQ CCSIDport = Integer.getInteger(prop.getProperty("mq.port")); // MQ 端口qmName = prop.getProperty("mq.qcfname"); // MQ的队列管理器名称qName = prop.getProperty("mq.queuename"); // MQ远程队列的名称session = null; // MQ会话connection = null; // MQ连接 destination =null;} catch (IOException e) {e.printStackTrace();}}/** * 初始化MQ 连接与会话 *  * @throws JMSException */public  void init() throws JMSException {MQQueueConnectionFactory factory = new MQQueueConnectionFactory();factory.setHostName(hostName);factory.setQueueManager(qmName);factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);factory.setChannel(channel);factory.setCCSID(CCSID);factory.setPort(port);destory();connection = factory.createConnection();connection.start();session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);destination=session.createQueue(qName);}public static void destory() throws JMSException {if (session != null) {session.close();}if (connection != null) {connection.stop();connection.close();}}/** * 发送一条文本消息 *  * @param message * @throws JMSException */public void sendTextMessage(MQObject message) throws JMSException {//Queue destination = session.createQueue(qName);MessageProducer producer = session.createProducer(destination);TextMessage textMessage = session.createTextMessage();textMessage.setText(message.toString());producer.send(textMessage);System.out.println("一次发送一条消息:"+message);producer.close();}/** * 一次发送多条文本消息 *  * @param messages * @throws JMSException */public static void sendTextMessage(MQObject[] messages) throws JMSException {//Queue destination = session.createQueue(qName);MessageProducer producer = session.createProducer(destination);for (MQObject message : messages) {TextMessage textMessage = session.createTextMessage();textMessage.setText(message.toString());producer.send(textMessage);}System.out.println("一次发送多条消息 :"+ Arrays.asList(messages));producer.close();}public static void main(String[] args) {new MQSender();}}

通过线程池发送消息的部分代码

public class MqMessageRunnable {private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public ExecutorService executor = Executors.newFixedThreadPool(8);@Autowiredpublic MQSender mqsender;public void onMessageRun(){executor.execute(new Runnable(){@Overridepublic void run() {//MQObject mqObject = getMessage(device,result); //获取MQ消息try {mqsender.sendTextMessage(mqObject);} catch (JMSException e) {e.printStackTrace();}}});}








0 0
原创粉丝点击