当前位置:   article > 正文

在springboot上刨rabbitmq和mqtt的祖坟_rabbitmq mqtt springboot

rabbitmq mqtt springboot

1.rabbit mq和mqtt

1.1mq

之前介绍过rabbitmq的安装和底层实现有兴趣可以查阅之前的博客。

重要的说明:

  • 生产者 producer:生产者向队列发送消息
  • 消费者 consumer:消费者从队列获取消息
  • 交换机 exchange:生产者将消息发给交换机,由交换机分发消息
  • 通道 channel:信道,用于通信
  • 队列 queue:储存消息的地方
  • 路由键 RoutingKey:指定当前消息被谁接受
  • 绑定key BindingKey:指定当前Exchange下,什么样的路由键会被下派到当前绑定的Queue中

今天抽象型的说一下mq各部分的运行机制:

交换机: 队列与交换机绑定,然后指定路由键,这样消息发送到交换机,交换机根据路由键去投递到匹配的队列中。

  • Direct Exchange 直连交换机
    需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。
  • Fanout Exchange 扇形交换机
    一种不使用路由键的交换机,收到的消息直接投递到绑定的全部队列上,一个队列一份。
  • Topic Exchange 主题交换机
    路由键匹配,他的路由键支持通配符比如"test/",可以匹配到多个路由键,假设交换机收到两条消息路由键是“test/1”“test/2”,那么交换机会发送给路由键是"test/"的交换机一份。
    “#”会匹配之后多级的目录,“”只能匹配后一级目录。
    test/
    : test/1
    test/# : test/1/2/3/4/5/6/7/8/9/10

队列:

  • 简单队列:Hello World
    一个生产者对应一个消费者没有中间商赚差价(交换机)。
  • work模式:Work queus
    一个生产者多个消费者,消息只会被一个消费者处理,同一条消息不会被重复消费,也没有中间商赚差价(交换机)。
  • 订阅模式:Publish/Subscribe
    类似于mqtt协议的主题订阅,消息先到交换机,交换机再将消息分配给已经绑定的消费者。
  • 路由模式:Routing
    和订阅模式极度相同,队列可以设置多个key绑定交换机任何一个匹配上了都可以接收消息,比如key为 test/get、test/put,test/get和test/put任何一个来消息了路由器都会投递到队列中。
  • 通配符模式:Topics
    和交换机的同通配符差不多,只是这次通配符用在了队列绑定交换机的key上
  • RPC(没啥用)

1.2mqtt

MQTT是当前物联网使用比较多的一个协议,他是以主题订阅的形式进行工作,类似于八婆传瞎话,某一个八婆在某个小团体中说别人的坏话,然后你不在它的小团里不行,它说别人坏话的时候你不在也听不见。
(mqttclient订阅某一个主题,然后所有订阅这个主题的用户都可以收发消息,某个客户端发送消息其他所有在线用户会同步收到,即时消息不会存储,不在线收不到消息,即使下线又上线之前不在线的消息也不会收到)

2.集成rabbitmq收发消息

注意:一定要现有队列才可以发送消息,发送消息并不会创建交换机和队列,可以先让消费者启动也就是RabbitListener他会根据配置创建。

2.1引入pom文件增加配置文件

POM文件

 <!-- rabbitmq依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.1.6.RELEASE</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

porperties

spring:
  #rabbitmq
  rabbitmq:
    port: 5672
    username: 账号
    password: 密码
    virtual-host: /
    host: ip
    listener:
      simple:
        ## auto表示自动完成这次消费,manual表示需要手动告知完成消费
        acknowledge-mode: manual
        ## listener开几个线程处理数据
        concurrency: 1
        ## linstener 最大开几个线程
        max-concurrency: 1
        ## 一次拿几条数据
        prefetch: 1
        # 开启重试,重试5次 间隔1retry:
          # 开启消费者(程序出现异常)重试机制,默认开启并一直重试
          enabled: true
          # 最大重试次数
          max-attempts: 5
          # 重试间隔时间(毫秒)
          initial-interval: 1000
        # 是否进入死信队列 truefalse不是
        default-requeue-rejected: false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

2.2参数说明

2.2.1交换机

@AliasFor("name")
String value() default ""; // 交换机名称(两个都是)
@AliasFor("value")
String name() default ""; // 交换机名称(两个都是)
String type() default "direct"; // 交换机类型
String durable() default "true"; // 是否是持久化的,即使rabbitmq重启,交换机是否存在
String autoDelete() default "false"; // 当没有队列绑定交换机自动销毁
String internal() default "false"; // 是否为内部交换机,内部交换机只能路由交换机到交换机
String 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号