activemq概念介绍

ActiveMQ概念介绍
是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,消息中间件。
消息中间件
A传递消息到B(功能或者系统),有比较强的耦合关系,但是耦合关系会带来一些问题,需要将AB断开
但是AB之间有依赖关系,需要找一个第三方M,进行通信。A发送消息到M,B从M获得消息,进行处理。
使用第三方进行消息传递,这种第三方叫做中间件。
作用
最主要的功能:实现JMS Provider,实现高可用高性能,可伸缩性,易于和安全企业级面向消息服务的系统。
异步操作(调用)
A发送消息到消息中间件,不必等待B消息结果的处理.
 
特点

1、 多种语言和协议编写客户端。语言: Java、C、C++、C#、Ruby、Perl、PythonPHP。应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP

2、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

3、对spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

4、通过了常见J2EE服务器(如 Geronimo、JBoss 4、GlassFish、WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

5、支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA

6、支持通过JDBC和journal提供高速的消息持久化

7、从设计上保证了高性能的集群,客户端-服务器,点对点

8、支持Ajax

9、支持与Axis的整合

10、可以很容易得调用内嵌JMS provider,进行测试

消息形式
1、点对点(queue)
2、一对多(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();
            }
        }
    }
}

 

posted @ 2018-11-14 15:45  风中驻足  阅读(467)  评论(0编辑  收藏  举报