hornetq生产者-发送数据到hornetq代码


在使用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();
        }
    }
}



猜你喜欢

转载自blog.csdn.net/MyHeartIsYours/article/details/79927340
今日推荐