activemq概念介紹

ActiveMQ概念介紹
是Apache下的開源項目,徹底支持JMS1.1和J2EE1.4規範的JMS Provider實現,消息中間件。
消息中間件
A傳遞消息到B(功能或者系統),有比較強的耦合關係,可是耦合關係會帶來一些問題,須要將AB斷開
可是AB之間有依賴關係,須要找一個第三方M,進行通訊。A發送消息到M,B從M得到消息,進行處理。
使用第三方進行消息傳遞,這種第三方叫作中間件。
做用
最主要的功能:實現JMS Provider,實現高可用高性能,可伸縮性,易於和安全企業級面向消息服務的系統。
異步操做(調用)
A發送消息到消息中間件,沒必要等待B消息結果的處理.
 
特色

一、 多種語言和協議編寫客戶端。語言: Java、C、C++、C#、Ruby、Perl、PythonPHP。應用協議:OpenWire、Stomp REST、WS Notification、XMPP、AMQPphp

二、徹底支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)java

三、對spring的支持,ActiveMQ能夠很容易內嵌到使用Spring的系統裏面去,並且也支持Spring2.0的特性python

四、經過了常見J2EE服務器(如 Geronimo、JBoss 四、GlassFish、WebLogic)的測試,其中經過JCA 1.5 resource adaptors的配置,可讓ActiveMQ能夠自動的部署到任何兼容J2EE 1.4 商業服務器上ios

五、支持多種傳送協議:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTAspring

六、支持經過JDBC和journal提供高速的消息持久化apache

七、從設計上保證了高性能的集羣,客戶端-服務器,點對點安全

八、支持Ajax服務器

九、支持與Axis的整合session

十、能夠很容易得調用內嵌JMS provider,進行測試異步

消息形式
一、點對點(queue)
二、一對多(topic)
##########
MOM基本功能:將信息以消息的形式,從一個應用程序傳送到另外一個或多個應用程序
MOM主要特色:
1.消息異步接受,相似手機短信行爲,消息發送者不須要等待消息接受者的響應,減小軟件多系統集成的耦合度
2.消息可靠接受,確保消息在中間件可靠保存,只有接受方收到消息後才刪除消息,多個消息也能夠組成原子事物
應用場景:
多個系統間整合和通信時候,一般要求:
1。可靠傳輸,數據不能丟失,有時候也要求不能重複傳輸
2.異步傳輸,不然各個系統同步發送接收數據,互相等待,形成系統瓶頸。
 簡單的例子
建立兩個工程A和工程B編寫測試類
package activemqA;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
 
//生產者
public class Sender {
	
	public static void main(String args[]){
		
		Sender sender = new Sender();
		sender.sendMessage("hello,activemqB");
		
	}
	
	public void sendMessage(String msg){
		
		ConnectionFactory connectionFactory = null;
		Connection connection = null;
		Session session = null;
		
		try {
			//1.建立鏈接工廠
			connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
			//2.獲得一個鏈接
			connection = connectionFactory.createConnection();
			//3.建立一個Session
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//4.建立目的地
			Destination destination = session.createQueue("myQueue");
			//5.建立發送者
			MessageProducer messageProducer = session.createProducer(destination);
			//6.建立文本消息
			TextMessage textMessage = session.createTextMessage(msg);
			//7.發送消息
			messageProducer.send(textMessage);
		} catch (JMSException e) {
			e.printStackTrace();
		}finally{
			//8.關閉connection和sessiosn
					try {
						if(connection !=null){
						connection.close();
						}
						if (session !=null) {
							session.close();
						}
					} catch (JMSException e) {
						e.printStackTrace();
			}
		}
	}
}

 消費者

package activemqB;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
 
//消費者
public class Receiver {
    
    public static void main(String args[]){
        
        Receiver receiver = new Receiver();
        receiver.receiverMessage();
    }
    
    public void receiverMessage(){
        
        ConnectionFactory connectionFactory = null;
        Connection connection = null;
        Session session =null;
    
        try {
            //1.建立鏈接工廠
            connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
            //2.獲得一個鏈接
            connection = connectionFactory.createConnection();
            //3.建立一個Session
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //4.建立目的地
            Destination destination = session.createQueue("myQueue");
            //5.建立接受者
            MessageConsumer messageConsumer = session.createConsumer(destination);
            //6.打開鏈接
            connection.start();
            //7.接收消息
            TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);
            //8.輸出驗證
            System.out.println("接收到的消息爲:"+textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }finally {
                try {
                    if (connection !=null) {
                    connection.close();
                    }
                    if (session !=null) {
                        session.close();
                    }
                } catch (JMSException e) {
                    e.printStackTrace();
            }
        }
    }
}
相關文章
相關標籤/搜索