【无标题】

目录 一:RabbitMq简介二:RabbitMQ 名词解释1):Message2):Publisher3):Exchange4):Binding5):Queue6):Connection7):Channel8):Consumer9):Virtual Host三:web 管理界面介绍四:消息队列种类:1).第一种模型(直连)消息生产者: 消息消费者:配置信息(只需要生产者): 2).Work工作队列模型消息生产者:消息消费者 3).发布订阅模型----->使用的是交换机 发布订阅模型推送到接收的流程①:Direct Exchange ②:Fanout Exchange③:Topic Exchange发布订阅模型-综合案例。三:消息回调处理①消息推送到server,但是在server里找不到交换机②消息推送到server,找到交换机了,但是没找到队列  ③消息推送到sever,交换机和队列啥都没找到 ④消息推送成功四:Mq应用场景①异步通讯②系统解耦③削峰填谷④数据同步④日志处理④任务调度

一:RabbitMq简介

在安装完rabbitMq后,

安装需要是哪个动作:

1:安装 Erlang环境,并配置环境变量,https://blog.csdn.net/m0_64633707/article/details/130527421

2:在那装rabbitMq。

3:输入http://ip:15672/ ,是可以看到一个简单后台管理界面的。

在这个界面里面我们可以做些什么?
可以手动创建虚拟host,创建用户,分配权限,创建交换机,创建队列等等,还有查看队列消息,消费效率,推送效率等等。

以上这些管理界面的操作在这篇暂时不做扩展描述,我想着重介绍后面实例里会使用到的。

二:RabbitMQ 名词解释

1):Message

		消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性

组成,这些属性包括 routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode

(指出该消息可能需要持久性存储)等。

2):Publisher

		   消息的生产者,也是一个向交换器发布消息的客户端应用程序

3):Exchange

		   交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列

4):Binding

		   绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由

规则,所以可以将交换器理解成一个由绑定构成的路由表。

5):Queue

	       消息队列,用来保存消息到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多,个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

6):Connection

网络连接,比如一个 TCP 连接。

7):Channel

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的 TCP 连接内地虚拟连接,AMQP

命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因

为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连

8):Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序

9):Virtual Host

		虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和,权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 。

	10):Broker

	表示消息队列服务器实体

三:web 管理界面介绍

connections:无论生产者还是消费者,都需要与 RabbitMQ 建立连接后才可以完成消息的生产和消费,

在这里可以查看连接情况

channels:通道,建立连接后,会形成通道,消息的投递获取依赖通道。

Exchanges:交换机,用来实现消息的路由

Queues:队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列

四:消息队列种类:

tip:RabbitMQ 发送消息分为 2 个阶段

			消息发送到交互机里面,可以监视

			消息由交互机到队列里面,也可以监视

1).第一种模型(直连)

消息生产者:

@SpringBootTest
public class SpringAMQPTest {
	//SpringAMQP提供的三个功能之一:封装了 RabbitTemplate 工具,用于发送消息 (生产者)
    @Autowired
    private RabbitTemplate template;

    @Test
    void test(){
    	//利用RabbitTemplate提供的方法向指定队列发送消息
        template.convertAndSend("simple.queue","Hello SpringAQMP!");
    }
}

消息消费者:

@Component
public class MessageListener {
	 /**
     * SpringAMQP提供的三个功能之二:基于注解的监听器模式,异步接收消息 (消费者)
     * @RabbitListener是SpringAMQP提供的监听消息队列的注解
     * @param message
     */
    @RabbitListener(queues = "simple.queue")
    public void basicQueueListener(String message) {
        System.out.println("消费者接收到消息:" + message);
    }
}

配置信息(只需要生产者):

server:
  port: 8001

spring:
  #给项目来个名字
  application:
    name: RabitMq-provider
  #配置rabbitMq 服务器
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

2).Work工作队列模型

消息生产者:

    @Test
    void testWorkQueue(){
        String queueName = "work.queue";
        String message = "Hello SpringAQMP-";
        for (int i = 0; i < 20; i++) {
            template.convertAndSend(queueName,message+i);
        }
    }

消息消费者

    @RabbitListener(queues = "work.queue")
    public void workQueueListener01(String message) throws InterruptedException {
        System.out.println("消费者01接收到消息:" + message + " - " + LocalTime.now());
        Thread.sleep(20);
    }
    @SneakyThrows
    @RabbitListener(queues = "work.queue")
    public void workQueueListener02(String message){
        System.out.println("消费者02接收到消息:" + message + " - " + LocalTime.now());

3).发布订阅模型----->使用的是交换机

 	 3.1.Fanout广播

	 3.2.Direct路由

	 3.3.Topics通配符

发布订阅模型推送到接收的流程

首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图:。

常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式也会有以下几种:

①:Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。
然后当一个消息携带着路由值为X,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值X去寻找绑定值也是X的队列。

②:Fanout Exchange

扇型交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

③:Topic Exchange

主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。
简单地介绍下规则:

*  (星号) 用来表示一个单词 (必须出现的)#  (井号) 用来表示任意数量(零个或多个)单词
通配的绑定键是跟队列进行绑定的,举个小例子
队列Q1 绑定键为 .TT.          队列Q2绑定键为  TT.#
如果一条消息携带的路由键为 A.TT.B,那么队列Q1将会收到;
如果一条消息携带的路由键为TT.AA.BB,那么队列Q2将会收到;

主题交换机是非常强大的,为啥这么膨胀?
当一个队列的绑定键为 “#”(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。
当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值