RabbitMQ入门

本文介绍了RabbitMQ作为消息中间件的作用、AMQP协议,并提供了安装和使用RabbitMQ的步骤,包括如何通过Docker部署。接着,详细讲解了RabbitMQ中的交换机类型,如直流交换机、主题交换机和输入交换机,以及它们的工作原理和配置示例。
摘要由CSDN通过智能技术生成

消息中间件有四个:activiteMq、Kafka、RocketMQ、RabbitMQ

四大消息中间件对比:

activiMq老牌消息中间件,api全面,但是吞吐量不大
Kafaka吞吐量大,但是数据无法保证不丢失,主要面向大数据
rokectMQ:吞吐量大,保证数据不丢失,并且支持分布式事物,但是商业版需要收费
rabbitMQ:吞吐量大,数据不易丢失

RabbitMQ简介

RabbitMQ高性能的原因?

Erlang语言最初在于交换机领域的架构模式,这样使得 RabbitMQ在Broker之间进行数据交互的性能是非常优秀的
Erlang的优点:Erlang有着和原生Socket—样的延迟

RabbitMQ作用(演变过程)
在这里插入图片描述
什么是AMQP高级消息队列协议

AMQP定义:
是具有现代特征的二进制协议;
是一个提供统一消息服务的应用层标准高级消息队列协议;
是应用层协议的一个开放标准,为面向消息的中间件设计;

AMQP核心概念(重点)
Server:又称Broker,接受客户端的连接,实现AMQP实体服务
Connection:连接:应用程序与Broker的网络连接
Channel:网络通道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道;客户端可建立多个Channel,每个Channel代表一个会话任务;
Message:消息,服务器与应用程序之间传递的数据,由Properties和Body组成。Properties可以对消息进行装饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容;
Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由;一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue;
Exchange:交换机,交换消息,根据路由键转发消息到绑定的队列;
Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key;
Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者

安装和使用

docker pull rabbitmq:management
在这里插入图片描述
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
访问路径140.143.242.67:15672 5672:应用访问端口;15672:控制台Web端口号
在这里插入图片描述
小插曲: 启动过后二次进入启动报错:解决方案

快速入门

重新选择一个新的工作区间和创建一个springboot项目(博客以rabbitmqapi为例)

换了新的工作区间要重新指定maven仓库
在这里插入图片描述
导入pom依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>3.6.5</version>
</dependency>

创建生产端和消费端
生产端…(既支付宝微服务)

package com.onlyk.api.rabbitmqapi.quickstart;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @author only老K 我为自己代言
 * @create 2020-03-03 9:32
 * @blogaddress https://blog.csdn.net/weixin_44255950
 * 相当于支付宝微服务
 * 发送消息的。
 */
public class Procuder {
   
    public static void main(String[] args) throws Exception {
   
        //1 创建一个ConnectionFactory, 并进行配置
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("140.143.242.67");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        //2 通过连接工厂创建连接
        Connection connection = connectionFactory.newConnection();
        //3 通过connection创建一个Channel
        Channel channel = connection.createChannel();
        //4 通过Channel发送数据
        for(int i=0; i < 5; i++){
   
            String msg = "Hello RabbitMQ!";
            //1 exchange   2 routingKey
            channel.basicPublish("", "test001", null, msg.getBytes());
        }
        channel.close();
        connection.close();
    }
}

消费端…(既订单微服务)

package com.onlyk.api.rabbitmqapi.quickstart;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

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

/**
 * @author only老K 我为自己代言
 * @create 2020-03-03 9:32
 * @blogaddress https://blog.csdn.net/weixin_44255950
 *
 * 相当于微服务架构中的订单微服务,短信微服务
 * 接收消息的。
 */
public class Consumer {
   
    public static void main(String[] args) throws Exception {
   
        //连接MQ服务器
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("140.143.242.67");//设置ip
        factory.setPort(5672);//设置端口号 5672是MQ服务的服务端口,而15672是web控制台的端口
        factory.setVi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值