ActiveMq發送接收對象

當前配置是允許接收所有的對象序列化,更多設置詳情參考官網:
http://activemq.apache.org/objectmessage.html

1、保證當前MQ能正常接收發送消息
2、定義一個實體類Member繼承Serializable

package com.activemq.test;

import java.io.Serializable;
import java.util.Date;

@SuppressWarnings("serial")
public class Member implements Serializable{
    private String name;
    private double score;
    private int age;
    private Date brithday;
    public Member(){}
    public Member(String name, double score, int age, Date brithday) {
        super();
        this.name = name;
        this.score = score;
        this.age = age;
        this.brithday = brithday;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Date getBrithday() {
        return brithday;
    }
    public void setBrithday(Date brithday) {
        this.brithday = brithday;
    }
    @Override
    public String toString() {
        return "Member [name=" + name + ", score=" + score + ", age=" + age + ", brithday=" + brithday + "]";
    }

}

4、發送端測試代碼

package com.activemq.test;

import java.util.Date;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class TestSendMq {

    private static final int SEND_NUMBER = 5;



    /**
     * @param args
     */
    public static void main(String[] args) {

        // ConnectionFactory:連接工廠,JMS用它創建連接

        ConnectionFactory connectionFactory;

        // Connection:JMS客戶端到JMS Provider的連接

        Connection connection = null;

        // Session:一個發送或接收消息的線程

        Session session;

        // Destination:消息的目的地;消息發送給誰.

        Destination destination;

        // MessageProducer:消息發送者

        MessageProducer producer;

        // TextMessage message;

        //構造ConnectionFactory實例對象,此處採用ActiveMq的實現jar

        connectionFactory = new ActiveMQConnectionFactory(

                ActiveMQConnection.DEFAULT_USER,

                ActiveMQConnection.DEFAULT_PASSWORD,

                "failover:(tcp://0.0.0.0:61618)");

        try {

            //構造從工廠得到連接對象

            connection =connectionFactory.createConnection();

            //啓動

            connection.start();

            //獲取操作連接

            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

            //獲取session 

            destination = session.createQueue("FirstQueue");

            //得到消息生成者【發送者】

            producer =session.createProducer(destination);

            //設置不持久化,此處學習,實際根據項目決定

           producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            //構造消息,此處寫死,項目就是參數,或者方法獲取

            sendMessage(session, producer);

            session.commit();

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                if (null != connection)

                    connection.close();

            } catch (Throwable ignore) {

            }

        }

        }



    public static void sendMessage(Session session,MessageProducer producer)

            throws Exception {

        for (int i = 1; i <=SEND_NUMBER; i++) {
            Member a = new Member("測試賬號"+i,11.1,15+i,new Date());
//          HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
//          map.put(i, i);
            ObjectMessage message = session

                    .createObjectMessage(a);

            //發送消息到目的地方

            System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);

            producer.send(message);

        }

    }

}

3、接收端測試代碼

package com.activemq.test;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class TestNewCounsumerMq {

    public static void main(String[] args) {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://0.0.0.0:61618");
//      factory.setTrustedPackages(new ArrayList<String>(Arrays.asList("com.activemq.test")));
        factory.setTrustAllPackages(true);  //允許接收所有的數據~~~
        org.apache.camel.component.jms.JmsConfiguration conf = new  org.apache.camel.component.jms.JmsConfiguration();
        conf.setConnectionFactory(factory);
        org.apache.activemq.camel.component.ActiveMQComponent comp= new org.apache.activemq.camel.component.ActiveMQComponent();
        comp.setConfiguration(conf);
        Connection connection = null ;
        try {
            connection = factory.createConnection();
             //啓動

            connection.start();

            //獲取操作連接

            Session session = connection.createSession(false,

                    Session.AUTO_ACKNOWLEDGE);

            //獲取session

            Destination destination = session.createQueue("FirstQueue");

            MessageConsumer consumer =session.createConsumer(destination);
            System.out.println(consumer);
            while (true) {

                //設置接收者接收消息的時間,爲了便於測試,這裏誰定爲100s

                ObjectMessage message =(ObjectMessage) consumer.receive(100000);
                if (null != message) {
                    Member a = (Member)message.getObject();
                    System.out.println("收到消息" +a.getName());

                    } else {

                        break;

                    }

                }
        } catch (JMSException e) {
            e.printStackTrace();
        }finally{
            try {

                if (null != connection)

                connection.close();

        } catch (Throwable ignore) {

        }
        }

    }

}

備註:以上純屬測試,更多安全詳情配置請參考官網
http://activemq.apache.org/objectmessage.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章