1. 程式人生 > >【11】ActiveMQ

【11】ActiveMQ

Apache activemq

  訊息中介軟體,實現的機制很簡單其實就是一個生產者 消費者 的一個機制,通過配置 xml  檔案方式,更改對應配置 ,儲存 使用的是 kahadb

1。java 程式碼使用

Sender

package ActiveMQ;

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

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import java.sql.Time; import java.util.concurrent.TimeUnit; public class Sender { public static
void main(String []arg) throws JMSException, InterruptedException { // 建立連線工廠 ConnectionFactory connectFactory = new ActiveMQConnectionFactory( "bhs","bhs", // ActiveMQConnection.DEFAULT_USER, // ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616" );
// 2 通過連線工廠 建立連線物件 Connection connection = connectFactory.createConnection(); connection.start(); //3 通過連線物件 獲取session // parm1 是否支援事務 parm2 確認方式 // Session.AUTO_ACKNOWLEDGE為自動確認, // Session.CLIENT_ACKNOWLEDGE為客戶端確認 // jms.Message的acknowledge方法。jms伺服器才會刪除訊息。 // DUPS_OK_ACKNOWLEDGE允許副本的確認模式 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); //4 .通過 session 會話物件 建立Destinations 目的物件 Queue firstMQ = session.createQueue("firstMQ"); //5. 通過 session 物件 建立訊息的生產者消費者 MessageProducer producer = session.createProducer(null); //6. 設定持久化特性 // producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //7. send 訊息 ,JMS 規範格式訊息 for(int i=0;i<100;i++){ TextMessage msg = session.createTextMessage("自定義的訊息" + i); producer.send(firstMQ,msg); //TimeUnit.SECONDS.sleep(1); } if(connection!= null){ connection.close(); } } }
View Code

Customer

package ActiveMQ;

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

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import java.util.concurrent.TimeUnit;

public class Custom {
    public  static void main(String []arg) throws JMSException {
        // 建立連線工廠
        ConnectionFactory connectFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616"
        );

        // 2  通過連線工廠 建立連線物件
        Connection connection = connectFactory.createConnection();
        connection.start();

        //3 通過連線物件 獲取session
        // parm1 是否支援事務 parm2 確認方式
        //        Session.AUTO_ACKNOWLEDGE為自動確認,
        //        Session.CLIENT_ACKNOWLEDGE為客戶端確認
        //        jms.Message的acknowledge方法。jms伺服器才會刪除訊息。
        //        DUPS_OK_ACKNOWLEDGE允許副本的確認模式
        Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);


        //4 .通過 session 會話物件 建立Destinations 目的物件
        Queue firstMQ  = session.createQueue("firstMQ");

        //5. 通過 session 物件 建立訊息的生產者消費者
        MessageConsumer consumer = session.createConsumer(firstMQ);

        while(true){
            TextMessage msg =(TextMessage) consumer.receive();
            System.out.println("消費資訊" + msg.getText());
        }

    }
}
View Code

 

2. 這裡的Sender 我採取了安全檢驗機制,更改了apache-activemq-5.15.8\conf\activemq.conf

添加了簡單的外掛

       <plugins>
            <simpleAuthenticationPlugin>
                <users>
                    <authenticationUser username="bhs" password="bhs" groups="users,admin"/>
                </users>
            </simpleAuthenticationPlugin>
        </plugins>
View Code

3 .還有基本配置裡面的 jetty-realm.properties 這個servlet 容器,可以進行修改對應的 user pass rolename

4.配置更換持久化機制