栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RabbitMQ一篇就够了

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RabbitMQ一篇就够了

RabbitMQ

RabbitMQ简介同步调用与异步调用

同步调用异步调用 什么是MQRabbitMQ快速入门

RabbitMQ概述常见消息模型入门案例总结

RabbitMQ简介

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。遵循协议-AMQP:

AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。 同步调用与异步调用 同步调用

同步调用的优点:时效性较强,可以立即得到结果同步调用的问题:耦合度高、性能和吞吐能力下降、有额外的资源消耗、 有级联失败问题 异步调用

MQ异步通信的优点:耦合度低、吞吐量提升、故障隔离、流量削峰异步通信的缺点:依赖于Broker的可靠性、安全性、吞吐能力架构复杂了,业务没有明显的流程线,不好追踪管理 什么是MQ

MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
RabbitMQ快速入门 RabbitMQ概述

RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址:https://www.rabbitmq.com/RabbitMQ中的一些角色:
-publisher:生产者
-consumer:消费者
-exchange个:交换机,负责消息路由
-queue:队列,存储消息
-virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离 常见消息模型

MQ的官方文档中给出了5个MQ的Demo示例,对应了几种不同的用法:
基本消息队列(BasicQueue)
工作消息队列(WorkQueue)
发布订阅(Publish、Subscribe)

根据交换机类型不同分为三种:
Fanout Exchange:广播
Direct Exchange:路由
Topic Exchange:主题 入门案例

1.导入相关父工程SpringBoot依赖:


        org.springframework.boot
        spring-boot-starter-amqp
 
2.发送消息事务端(publisher)

思路:建立连接、创建Channel、声明队列、发送消息、关闭连接和channel代码实现

public class PublisherTest {
  @Test
  public void testSendMessage() throws IOException, TimeoutException {
      // 1.建立连接
      ConnectionFactory factory = new ConnectionFactory();
      // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
      factory.setHost("192.168.150.101");
      factory.setPort(5672);
      factory.setVirtualHost("/");
      factory.setUsername("xunmeng");
      factory.setPassword("123321");
      // 1.2.建立连接
      Connection connection = factory.newConnection();

      // 2.创建通道Channel
      Channel channel = connection.createChannel();

      // 3.创建队列
      String queueName = "simple.queue";
      channel.queueDeclare(queueName, false, false, false, null);

      // 4.发送消息
      String message = "hello, rabbitmq!";
      channel.basicPublish("", queueName, null, message.getBytes());
      System.out.println("发送消息成功:【" + message + "】");

      // 5.关闭通道和连接
      channel.close();
      connection.close();
  	}
  }
3.接收消息事务端(consumer)

思路:建立连接、创建Channel、声明队列、订阅消息代码实现

public class ConsumerTest {

  public static void main(String[] args) throws IOException, TimeoutException {
      // 1.建立连接
      ConnectionFactory factory = new ConnectionFactory();
      // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
      factory.setHost("192.168.150.101");
      factory.setPort(5672);
      factory.setVirtualHost("/");
      factory.setUsername("xunmeng");
      factory.setPassword("123321");
      // 1.2.建立连接
      Connection connection = factory.newConnection();

      // 2.创建通道Channel
      Channel channel = connection.createChannel();

      // 3.创建队列
      String queueName = "simple.queue";
      channel.queueDeclare(queueName, false, false, false, null);

      // 4.订阅消息
      channel.basicConsume(queueName, true, new DefaultConsumer(channel){
          @Override
          public void handleDelivery(String consumerTag, Envelope envelope,
                                     AMQP.BasicProperties properties, byte[] body) throws IOException {
              // 5.处理消息
              String message = new String(body);
              System.out.println("接收到消息:【" + message + "】");
          }
      });
      System.out.println("等待接收消息。。。。");
  	}
  }
总结

基本消息队列的消息发送流程:

    建立connection

    创建channel

    利用channel声明队列

    利用channel向队列发送消息

基本消息队列的消息接收流程:

    建立connection

    创建channel

    利用channel声明队列

    定义consumer的消费行为handleDelivery()

    利用channel将消费者与队列绑定

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号