关于java:面试必问RabbitMQ-有哪几种消息模式
原文:juejin.cn/post/6998363970037874724 前言Rabbitmq 是应用 Erlang 语言开发的开源音讯队列零碎,基于 AMQP 实现,是一种应用程序对应用程序的通信办法,应用程序通过读写出入队列的音讯来通信,而无需专用连贯来链接它们。消息传递指的是应用程序之间通过在音讯中发送数据进行通信,而不是通过间接调用彼此通信,间接调用通常是指近程过程调用的技术。 外围组成 Server:又称 Broker,接管客户端的连贯,实现 AMQP 实体服务,装置 rabbitmq-serverConnection:连贯,应用程序与Broker的网络连接TCP/IP/三次握手和四次挥手Channel:网络信道,简直所有操作都在 Channel 中进行,Channel 是进行音讯读写的通道,客户端能够建设多个 Channel,每个 Channel 代表一个会话工作。Message:音讯,服务与应用程序之间传送的数据,由 Properties 和 Body 组成,Properties 能够对音讯进行润饰,比方音讯的优先级,提早等高级个性,Body 则是音讯体的内容。Virtual Host:虚拟地址,用于进行逻辑隔离,最上层的音讯路由,一个虚拟主机能够有若干个 exchange 和 queue,同一个虚拟主机外面不能有雷同名称的 exchangeExchange:交换机,接管音讯,依据路由键发送音讯到绑定的队列(不具备音讯存储能力)Bindings:exchange 和 queue 之间的虚构连贯,binding 中能够保留多个 routing keyRouting key:是一个路由规定,虚拟机能够用它来确定如何路由一个特定音讯Queue:队列,也称为 Message Queue,音讯队列,保留音讯并将它们转发给消费者Rabbitmq 音讯模式3.1 Simple 模式 Simple 模式是最简略的一个模式,由一个生产者,一个队列,一个消费者组成,生产者将音讯通过交换机(此时,图中并没有交换机的概念,如不定义交换机,会应用默认的交换机)把音讯存储到队列,消费者从队列中取出音讯进行解决。 用 Java demo 实现此模式,举荐一个开源收费的 Spring Boot 最全教程: https://github.com/javastacks/spring-boot-best-practiceProductor public class Send { private final static String QUEUE_NAME = "queue1"; public static void main(String[] args) { // 1、创立连贯工程 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.96.109"); factory.setVirtualHost("/"); Connection connection = null; Channel channel = null; try { // 2、创立连贯、通道 connection = factory.newConnection(); channel = connection.createChannel(); // 3、申明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 音讯内容 String message = "Hello world"; // 4、发送音讯到指定队列 channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); System.out.println(" [x] Sent '" + message + "'"); } catch (TimeoutException | IOException e) { e.printStackTrace(); } finally { // 敞开通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (Exception e) { e.printStackTrace(); } } // 敞开连贯 if (connection != null && connection.isOpen()) { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } } }}Customer ...