在开发中经常在接口对接时需要搭建一个mq的服务器(如Android和web网页对接时),下面就搭建一个服务方便使用。
package com.activemq;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageService {
private static MessageService instance;
private static ConnectionFactory connectionFactory;
private static Connection connection;
private static Session session;
private static MessageProducer producer;
public String getUrl(){
Properties properties = new Properties();
// 使用ClassLoader加载properties配置文件生成对应的输入流
InputStream in = MessageService.class.getClassLoader().getResourceAsStream("MQconfig.properties");
// 使用properties对象加载输入流
try {
properties.load(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取key对应的value值
return properties.getProperty("url");
}
//单列模式保证只有一个实例
public static MessageService getInstance(){
if(instance == null){
instance = new MessageService();
return instance;
}else{
return instance;
}
}
/**
* 初始化
*/
private void init(){
try {
connectionFactory = new ActiveMQConnectionFactory("admin","admin",getUrl());//admin为mq的登录密码和账号,创建MQ的连接工厂。
connection = connectionFactory.createConnection();//通过连接工厂创建连接对象
connection.start();//开启连接
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("Radio");//创建一个发布订阅消息
producer = session.createProducer(topic);
}catch(Exception e) {
e.printStackTrace();
}
}
private MessageService(){
init();
}
/**
* 给所有注册用户发送文本信息
* @param messagevalue
* @return
*/
public boolean sendMessageToAll(String messagevalue){
try{
TextMessage textMessage = session.createTextMessage(messagevalue);
producer.send(textMessage);
session.commit();
return true;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
/**
* 给指定注册用户发送文本信息
* @param cilentid指定用户标识如id
* @param messag 消息内容
* @return
*/
public boolean sendMessageToSengle(String cilentid,String message){
Session session2 = null;
try{
session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Topic queue = session2.createTopic(cilentid);
MessageProducer producer2 = session2.createProducer(queue);
TextMessage textMessage = session2.createTextMessage(message);
producer2.send(textMessage);
session2.commit();
return true;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}finally {
if(session2 != null){
try {
session2.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
在项目src下面添加MQconfig.properties里面文件添加tcp的url
url=tcp://XXX.XXX.X.XXX:61616