• 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();
                }
            }
        }
    }
  • 相关阅读:
    IDEA下同时使用Git和svn
    IDEA进行activiti-archetype-unittest脚手架的安装
    正则表达式
    关于JS堆栈与拷贝
    按值传递--
    JS---变量、作用域和内存问题
    laod
    待解决
    闭包2
    闭包1
  • 原文地址:https://www.cnblogs.com/fengzhongzhuzu/p/9958313.html
Copyright © 2020-2023  润新知