1、常用命令

    描述 命令
    启动管理工具 rabbitmq-plugins enable rabbitmq_management

    2、用户角色

    角色 描述
    超级管理员(administrator) 可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
    监控者(monitoring) 可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    策略制定者(policymaker) 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
    普通管理者(management) 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
    其他 无法登陆管理控制台,通常就是普通的生产者和消费者。

    3、管理工具
    默认账号 guest/guest

    RabbitMQ - 图1
    消息确认模式
    模式1:自动确认
    只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。
    模式2:手动确认
    消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。
    交换机类型

    1. direct 路由模式(如果路由键完全匹配的话,消息才会被投放到相应的队列.)
    2. fanout 发布订阅模式(当发送一条消息到fanout交换器上时,它会把消息投放到所有附加在此交换器的上的队列.)
    3. headers
    4. topic(设置模糊的绑定方式,”*”操作符将”.”视为分隔符,匹配单个字符;”#”操作符没有分块的概念,它将任意”.”均视为关键字的匹配部分,能够匹配多个字符.)

    五种队列模式

    1. helloword 模式 消息 1 : 1
    2. 工作队列 1条消息只能被一个消费者消费(有轮询、多劳多得模式)
    3. 发布/订阅 模式 一个消息可以被多个消费者消费 消息发送至 交换机,交换机绑定队列 ,消费者监听队列。
    4. 路由模式 (生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费信息.)
    5. 主题模式(上面的路由模式是根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配.

    符号”#”表示匹配一个或多个词,符号”*”表示匹配一个词.

    1. )

    RabbitMQ - 图2

    工作原理
    RabbitMQ - 图3
    4、持久化交换机和队列
    **RabbitMQ - 图4
    5、spring boot 集成 rabbitmq

    1. 加入依赖 ```java org.springframework.boot spring-boot-starter-amqp
    1. 2. 配置application.properties文件
    2. ```java
    3. spring.application.name=spirng-boot-rabbitmq
    4. spring.rabbitmq.host=127.0.0.1
    5. spring.rabbitmq.port=5672
    6. spring.rabbitmq.username=admin
    7. spring.rabbitmq.password=admin
    1. 配置队列

      1. @Configuration
      2. public class RabbitConfig {
      3. @Bean
      4. public Queue queue() {
      5. return new Queue("q_hello");
      6. }
      7. }
    2. 消息生产者

      1. @Component
      2. public class HelloSender {
      3. @Autowired
      4. private AmqpTemplate rabbitTemplate;
      5. public void send() {
      6. String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//24小时制
      7. String context = "hello " + date;
      8. System.out.println("Sender : " + context);
      9. //简单队列的情况下routingKey即为Q名
      10. this.rabbitTemplate.convertAndSend("q_hello", context);
      11. }
      12. }
    3. 消息消费者

      1. @Component
      2. @RabbitListener(queues = "q_hello")
      3. public class HelloReceiver {
      4. @RabbitHandler
      5. public void process(String hello) {
      6. System.out.println("Receiver : " + hello);
      7. }
      8. }
    4. 启动rabbitmq

      1. service rabbitmq-server start