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();
            }
        }
    }
}
相关文章
相关标签/搜索