mapleins

gay

<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  可序列化对象

  属性

 

posted @ 2018-12-20 18:42  mapleins  阅读(180)  评论(0编辑  收藏  举报