rabbitmq入门demo

1-2 RabbitMQ简介

初识RabbitMQ

  • RabbitMQ是一个开源的消息代理和队列服务器
  • 用来通过普通协议在完全不同的应用之间共享数据
  • RabbitMQ是使用Erlang语言来编写的
  • 并且RabbitMQ是基于AMQP协议的

RabbitMQ简介

  • 目前很多互联网大厂都在使用RabbitMQ
  • RabbitMQ底层采用Erlang语言进行编写
  • 开源、性能优秀,稳定性保障
  • 与SpringAMQP完美的整合、API丰富
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性
  • AMQP全称:Advanced Message Queuing Protocol
  • AMQP翻译:高级消息队列协议

AMQP协议模型

rabbitmq入门demo_第1张图片

1-3 RabbitMQ安装

https://blog.csdn.net/weixin_39735923/article/details/79288578

1-4 RabbitMQ概念

RabbitMQ的整体架构

rabbitmq入门demo_第2张图片

RabbitMQ核心概念

  • 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,消息队列,保存消息并将它们转发给消费者

RabbitMQ消息的流转过程

rabbitmq入门demo_第3张图片

第二章:RabbitMQ使用

2-1 发送消息

SpringBoot与RabbitMQ集成

  • 引入相关依赖
  • 对application.properties进行配置

   生产端代码

package com.example.spring.controller;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.stereotype.Controller;

import com.example.spring.entity.Order;

@Controller
public class OrderSender {
     private RabbitTemplate rabbitTemplate;

        public OrderSender(
                RabbitTemplate rabbitTemplate) {
            this.rabbitTemplate = rabbitTemplate;
        }
     public void send(Order order) {
            //exchange:交换机
            // routingKey:路由键
            // message:消息体内容
            // correlationData:消息唯一ID
         CorrelationData correlationData = new CorrelationData();
         correlationData.setId(order.getMessageId());
         this.rabbitTemplate.convertAndSend("exchange", "order.b", order, correlationData);
     }
}

2-2 接受消息

 消费者部分代码:

package com.example.spring;

import com.example.spring.entity.Order;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 *

 * 标题: 订单接收者

 * 描述: 订单接收者

 * 时间: 2018/10/5

 *
 * @author wq
 */
@Component
public class OrderReceiver {

    /**
     * 接收消息
     *
     * @param order   消息体内容
     * @param headers 消息头内容
     * @param channel 网络信道
     * @throws Exception 异常
     */
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "order.b",durable = "true"),
            exchange = @Exchange(name = "exchange",type = "topic"),
            key = "order.*"
    ))
    @RabbitHandler
    public void onOrderMessage(@Payload Order order, @Headers Map headers, Channel channel) throws Exception {
        // 消费者操作
        System.out.println("收到消息:");
        System.out.println("订单信息:" + order.toString());

        // 手动签收消息
        Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
        channel.basicAck(deliveryTag, false);
    }
}

源码地址 : https://gitlab.com/openice/rabbitmq-producer.git

                https://gitlab.com/openice/rabbitmq-consumer.git

文章 摘抄慕课网笔记 :地址 :https://segmentfault.com/a/1190000016326662

你可能感兴趣的:(安装,配置,demo)