• <ActiveMQ>


    ActiveMQ简介

      ActiveMQ是Apache研发的消息中间件,支持JMS1.1和J2EE1.4规范的JMS Provider实现

      主要应用于分布式系统架构中,帮助构建高可用,高性能,可伸缩的企业级面向消息服务的系统

    ActiveMQ应用场景

    1.异步发送消息

    2.应用间解耦

    3.流量削锋

    ActiveMQ安装

    tar -zxvf **.tar.gz

    ./activemq start 启动服务

    访问页面 ip:port

    注意 此版本需要jdk1.8及以上

    JMS基本概念

    java message service 是java平台中关于面向消息中间件的API,用于两个应用程序之间,或者分布式系统中发送消息,进行异步通信 。

    类似JDBC,由厂商去实现

    JMS是一个与具体平台无关的API,绝大多数MOM(message oriented middleware)面向消息中间件提供商都对JMS提供了支持。

    下图就是MOM的模型

    MOM:面向消息的中间件,使用消息传送提供者来协调消息传输操作。 MOM需要提供API和管理工具。 客户端调用api。 把消息发送到消息传送提供者指定的目的地

    在消息发送之后,客户端会技术执行其他的工作。并且在接收方收到这个消息确认之前。提供者一直保留该消息

    JMS规范

    消息传递域:

    * 点对点 p2p

      1.每个消息只能被消费一次,也就是只能有一个消费者

      2.消息的生产者和消费者没有时间上的相关性,无论消费者在生产者发送消息的时候是否是运行状态,都可以提取消息。

    * 发布定于 pub/sub

      1.每个消息可以有多个消费者

      2.消息的生产者和消费者之间存在时间上的相关性,订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS规范允许提供客户端创建持久订阅

    简单的例子:

            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>5.15.0</version>
            </dependency>
    package org.maple.producer;
    
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    import javax.jms.*;
    
    /**
     * @author mapleins
     * @Date 2018-12-20 19:46
     * @Desc 生产者
     **/
    public class Producer {
    
        public static void main(String[] args) {
            //创建连接工厂
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.0.110:61616");
            //创建连接
            Connection connection = null;
            try {
                //建立连接
                connection = connectionFactory.createConnection();
                connection.start();
                //通过连接创建会话
                Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
                //通过Session创建队列,如果存在则不会再创建
                //destination是目的地
                Destination destination = session.createQueue("first queue");
                //创建消息发送者
                MessageProducer producer =session.createProducer(destination);
                //创建消息
                TextMessage textMessage = session.createTextMessage("hello , activemq");
                producer.send(textMessage);
                //提交会话
                session.commit();
                //关闭会话
                session.close();
            } catch (JMSException e) {
                e.printStackTrace();
            } finally {
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    package org.maple.consumer;
    
    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.apache.activemq.ActiveMQMessageConsumer;
    
    import javax.jms.*;
    import javax.xml.soap.Text;
    
    /**
     * @author mapleins
     * @Date 2018-12-20 19:54
     * @Desc 消费者
     **/
    public class Consumer {
    
        public static void main(String[] args) {
            //创建连接工厂
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.0.110:61616");
            //创建连接
            Connection connection = null;
            try {
                //建立连接
                connection = connectionFactory.createConnection();
                connection.start();
                //通过连接创建会话
                Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
                //通过Session创建队列,如果存在则不会再创建
                //destination是目的地
                Destination destination = session.createQueue("first queue");
    
                //创建消费者
                MessageConsumer consumer = session.createConsumer(destination);
                //接收消息
                TextMessage message = (TextMessage) consumer.receive();
                System.out.println(message.getText());
                //提交会话
                session.commit();
                //关闭会话
                session.close();
            } catch (JMSException e) {
                e.printStackTrace();
            } finally {
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    JMS API

      ConnectionFactory  连接工厂

      Connection             封装客户端与JMS provider之间的一个虚拟的连接

      Session                    生产和消费消息的一个单线程上下文; 用于创建producer、consumer、message、queue..

      Destination               消息发送或者消息接收的目的地

      MessageProducer/consumer 消息生产者/消费者

    消息组成

      消息头

        包含消息的识别信息和路由信息

      消息体

        TextMessage

        MapMessage

        BytesMessage

        StreamMessage   输入输出流

        ObjectMessage  可序列化对象

      属性

  • 相关阅读:
    技术省钱野路子!轻松节省90%云端开销
    免费服务器迁移上云实践分享!一键迁云,自动同步
    云上自建数据库,秒级备份,看这篇就对了!
    最佳实践 | 弹性计算Region化部署和跨可用区容灾
    云服务器无法远程连接?4步排查,准能解决!
    阿里云弹性计算安全组最佳实践及新特性介绍
    AI云原生浅谈:好未来AI中台实践
    最佳实践 | 基于弹性计算网络能力提升容器密度
    AI性能最高提升20倍 阿里云新一代GPU云服务器亮相 搭载NVIDIA A100
    【转】【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态
  • 原文地址:https://www.cnblogs.com/mapleins/p/10151462.html
Copyright © 2020-2023  润新知