01-消息中间件概述和ActiveMq入门

Posted codetree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01-消息中间件概述和ActiveMq入门相关的知识,希望对你有一定的参考价值。

1.mq解决的问题

  • 系统异步处理
  • 应用解耦
  • 流量削峰
  • 日志处理
  • 消息通信

2.消息中间件的2中模型

2.1 Point-to-Point(P2P) / 点对点 / 类比:送快递

技术分享图片

特点:
+ 一个消费生产者必须有一个消息消费者。一对一的关系
+ 一个消息发送到queue中,如果mqserver重启,消息不会丢失(当然也可以设置为丢失。缺省是不会丢失的)

2.2 Topic/ 主题(发布订阅(Pub/Sub) )/类比:广播

技术分享图片

特点:
+ 一个生产者生产的消息可以同时被多个消息消费者消费。一对多。
+ 一个消费者可以消费来自不同生产者的消息。

3. Java Messaging Service规范

3.1 JMS规范模型包含如下几个要素

  • 连接工厂
  • 获取连接
  • 创建会话
  • JMS的目的/broker
  • 创建生产者
  • 创建消费者

5. Hello ActiveMQ

5.1 原生api


package com.hs.gz.hellodemo.mq.demo;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMessage;

/**
 * 生产者
 * @author hasee
 *
 */
public class Producer {
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROKEURL = "tcp://139.199.158.112:61616";
    private static final int SENDNUM = 3;
    public static void main(String[] args) throws Exception {
        //工厂
        ConnectionFactory factory;
        //连接
        Connection connection;
        //会话
        Session session;
        //目的地
        Destination destination;
        //消费者
        MessageProducer producer;
        //指定用户名,密码和url来创建连接工厂
        factory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);
        //从连接工厂中获取丽连接
        connection = factory.createConnection();
        //从连接中创建session
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         /* 创建一个名为HelloWorld消息队列*/
        destination = session.createQueue("HelloWorld");
        /*往队列里面注册生产者*/
        producer = session.createProducer(destination);
        for (int i = 0; i < SENDNUM; i++) {
             String msg = "发送消息"+i+" "+System.currentTimeMillis();
             TextMessage textMessage = session.createTextMessage(msg);
             producer.send(textMessage);
        }
        System.out.println("生成者生产ok.....");
        producer.close();
        session.close();
        connection.close();
    }
}

package com.hs.gz.hellodemo.mq.demo;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
 * 消费者
 * @author hasee
 *
 */
public class Consumer {
    /* 默认连接用户名 */
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    /* 默认连接密码 */
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    /* 默认连接地址 */
    private static final String BROKEURL = "tcp://139.199.158.112:61616";
    
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory;
        Connection connection;
        Session session;
        Destination destination = null;
        MessageConsumer consumer;
        factory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);
        connection = factory.createConnection();
         /* 启动连接*/
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = session.createQueue("HelloWorld");
        consumer = session.createConsumer(destination);
        //一直监听mqserver,如果有待消费的消息就进行消费
        Message message;
        while((message = consumer.receive()) != null ) {
            System.out.println("consumer..." + ((TextMessage)message).getText());
        }
        
        consumer.close();
        session.close();
        connection.close();
    }
}

以上是关于01-消息中间件概述和ActiveMq入门的主要内容,如果未能解决你的问题,请参考以下文章

mq_学习_01_资源帖

Java中间消息件——ActiveMQ入门级运用

关于消息中间件ActiveMQ的企业级应用

ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程

消息中间件-----概述JMS以及ActiveMQ简介

消息中间件系列一:入门JMS规范ActiveMQ使用