【11】ActiveMQ
阿新 • • 發佈:2018-12-04
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;View Codeimport 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 staticvoid 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(); } } }
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.配置更換持久化機制