本文介绍: RabbitMQ(一)

第十章 RabbitMQ

一、初识 MQ

1. 同步异步通讯

在这里插入图片描述

1.1 同步通讯

在这里插入图片描述

1.2 异步通讯

在这里插入图片描述

2. 技术对比

2.1 比较常见的 MQ 实现
2.2 几种常见 MQ 的对比
RabbitMQ ActiveMQ RocketMQ Kafka
公司/社区 Rabbit Apache 阿里 Apache
开发语言 Erlang Java Java Scala&Java
协议支持 AMQP,XMPP,SMTP,STOMP OpenWire,STOMP,REST,XMPP,AMQP 自定义协议 自定义协议
可用性 一般
单机吞吐量 一般 非常高
消息延迟 微秒级 毫秒 毫秒 毫秒以内
消息可靠性 一般 一般

二、快速入门

1. 安装 RabbitMQ

1.1 单机部署
1.1.1 下载镜像
docker pull rabbitmq:3-management
docker load -i mq.tar
1.1.2 安装 MQ
docker run 
 -e RABBITMQ_DEFAULT_USER=alex 
 -e RABBITMQ_DEFAULT_PASS=123321 
 --name mq 
 --hostname mq1 
 -p 15672:15672 
 -p 5672:5672 
 -d 
 rabbitmq:3-management
1.2 集群部署
集群分类
1.3 MQ 的基本结构

在这里插入图片描述

2. RabbitMQ 消息模型

在这里插入图片描述

3. 导入 Demo 工程

在这里插入图片描述

在这里插入图片描述

4. 入门案例

在这里插入图片描述

4.1 publisher 实现
package com.alex.mq.helloworld;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class PublisherTest {
    @Test
    public void testSendMessage() throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名端口号vhost用户名密码
        factory.setHost("192.168.150.101");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("alex");
        factory.setPassword("123321");
        // 1.2.建立连接
        Connection connection = factory.newConnection();

        // 2.创建通道Channel
        Channel channel = connection.createChannel();

        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);

        // 4.发送消息
        String message = "hello, rabbitmq!";
        channel.basicPublish("", queueName, null, message.getBytes());
        System.out.println("发送消息成功:【" + message + "】");

        // 5.关闭通道和连接
        channel.close();
        connection.close();

    }
}
4.2 consumer 实现
package com.alex.mq.helloworld;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class ConsumerTest {

    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名端口号vhost用户名密码
        factory.setHost("192.168.150.101");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("alex");
        factory.setPassword("123321");
        // 1.2.建立连接
        Connection connection = factory.newConnection();

        // 2.创建通道Channel
        Channel channel = connection.createChannel();

        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);

        // 4.订阅消息
        channel.basicConsume(queueName, true, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 5.处理消息
                String message = new String(body);
                System.out.println("接收到消息:【" + message + "】");
            }
        });
        System.out.println("等待接收消息。。。。");
    }
}

5. 总结

  1. 建立 connection

  2. 创建 channel

  3. 利用 channel 声明队列

  4. 利用 channel 向队列发送消息

  1. 建立 connection

  2. 创建 channel

  3. 利用 channel 声明队列

  4. 定义 consumer 的消费行为 handleDelivery()

  5. 利用 channel 将消费者与队列绑定

原文地址:https://blog.csdn.net/sgsgkxkx/article/details/134173661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41510.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注