在使用hornetq的过程中,可能需要手动想消息中间件发送数据,下面是发送消息的测试类:
1、启动类:
package test;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.springframework.jms.core.JmsTemplate;
public class Main {
public static void main(String[] args) throws NamingException {
JmsTemplate jmsTemplate = HornetQUtil.getJmsTemplate();
List<List<String>> objs = new ArrayList<List<String>>();
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("Hello world");
list2.add("Hello world");
objs.add(list1);
objs.add(list2);
HornetQUtil.sendMsg(jmsTemplate, objs);
}
}
2、功能实现工具类:
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.NamingException;
import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.jms.HornetQJMSClient;
import org.hornetq.api.jms.JMSFactoryType;
import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory;
import org.hornetq.jms.client.HornetQConnectionFactory;
import org.springframework.jms.connection.CachingConnectionFactory;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jndi.JndiObjectFactoryBean;
import org.springframework.jndi.JndiTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class HornetQUtil {
public static JmsTemplate getJmsTemplate() throws NamingException{
/*final String jmsType = "NON_CLUSTERED";
final List<String> urls = new ArrayList<String>(){{add("192.168.174.128:1099");}};*/
final String jmsType = "CLUSTERED";
final List<String> urls = new ArrayList<String>(){{add("192.168.174.128:5445");}};
return HornetQUtil.getJmsTemplate(jmsType,urls);
}
public static JmsTemplate getJmsTemplate(String jmsType,List<String> urls) throws NamingException {
ConnectionFactory cFactory =null;
if("NON_CLUSTERED".equals(jmsType)){
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
Properties prop = new Properties();
prop.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.put("java.naming.provider.url", urls.get(0));
prop.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
JndiTemplate jndiTemplate = new JndiTemplate(prop);
bean.setJndiName("/ConnectionFactory");
bean.setJndiTemplate(jndiTemplate);
bean.afterPropertiesSet();
cFactory = (ConnectionFactory) bean.getObject();
} else if("CLUSTERED".equals(jmsType)){
if (urls == null || urls.size() == 0) {
return null;
}
List<TransportConfiguration> servers = new ArrayList<TransportConfiguration>();
for (String url : urls) {
if (url != null && url.contains(":")) {
String[] turl = url.split(":");
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("host", turl[0]);
map.put("port", turl[1]);
TransportConfiguration server = new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
servers.add(server);
}
}
HornetQConnectionFactory hConnectionFactory = HornetQJMSClient.createConnectionFactoryWithHA(JMSFactoryType.CF,
servers.toArray(new TransportConfiguration[servers.size()]));
hConnectionFactory.setConnectionTTL(60000);
hConnectionFactory.setConsumerWindowSize(1048576);
CachingConnectionFactory haFactory = new CachingConnectionFactory();
haFactory.setTargetConnectionFactory((ConnectionFactory) hConnectionFactory);
haFactory.setSessionCacheSize(50);
haFactory.setReconnectOnException(true);
haFactory.setCacheConsumers(true);
haFactory.setCacheProducers(true);
cFactory = haFactory;
}
JmsTemplate jmsTemplate = new JmsTemplate(cFactory);
jmsTemplate.setDefaultDestinationName("TestQueue");
return jmsTemplate;
}
public static void sendMsg(JmsTemplate jmsTemplate,final List list){
HornetQUtil.sendMsg(jmsTemplate,list,"TestQueue");
}
public static void sendMsg(JmsTemplate jmsTemplate,final List list,String QUEUE_NAME){
try {
Queue testQueue = HornetQJMSClient.createQueue(QUEUE_NAME);
jmsTemplate.send(testQueue, new MessageCreator() {
final String text = JSON.toJSONString(list,
SerializerFeature.BrowserCompatible,
SerializerFeature.WriteClassName,
SerializerFeature.DisableCircularReferenceDetect);
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage tm = session.createTextMessage(text);
return tm;
}
});
}catch(Exception e){
e.printStackTrace();
}
}
}