国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用消息中間件實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦

這篇具有很好參考價(jià)值的文章主要介紹了使用消息中間件實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

???????目錄

引言

一. 選擇合適的消息中間件

二. 定義消息格式和通信協(xié)議

1. 定義消息格式

消息頭

消息體

2. 定義通信協(xié)議

發(fā)送消息

接收消息

消息處理

3. 示例代碼

定義消息格式

發(fā)送消息

接收消息

三、發(fā)布-訂閱模式

1. 定義發(fā)布-訂閱模式

2. 示例代碼

發(fā)布消息

訂閱消息

3. 運(yùn)行示例

4. 異步處理消息

5. 解耦系統(tǒng)

6. 實(shí)現(xiàn)步驟

7. 實(shí)例場(chǎng)景

實(shí)例場(chǎng)景:電商系統(tǒng)訂單處理

場(chǎng)景描述

實(shí)現(xiàn)步驟

示例代碼

訂單服務(wù)發(fā)送消息

庫存服務(wù)接收消息

物流服務(wù)接收消息


引言

在現(xiàn)代分布式系統(tǒng)中,異步通信和解耦是非常重要的設(shè)計(jì)原則。通過使用消息中間件,可以實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦,提高系統(tǒng)的可擴(kuò)展性和可靠性。本文將介紹如何使用消息中間件來實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦,并通過一個(gè)實(shí)際場(chǎng)景來演示。

一. 選擇合適的消息中間件

選擇合適的消息中間件需要考慮多個(gè)因素,包括項(xiàng)目需求、性能要求、可靠性、社區(qū)支持等。常見的消息中間件包括 RabbitMQ、Kafka、ActiveMQ、Redis 等,下面針對(duì)不同的需求給出一些選擇建議:

  1. 消息傳遞模式

    • 點(diǎn)對(duì)點(diǎn):適合使用 RabbitMQ、ActiveMQ 等傳統(tǒng)消息中間件。
    • 發(fā)布-訂閱:適合使用 RabbitMQ、Kafka 等支持廣播消息的中間件。
  2. 可靠性

    • 如果對(duì)消息的可靠性要求較高,需要確保消息不會(huì)丟失,可以考慮使用 RabbitMQ、Kafka 等提供消息持久化和高可靠性的中間件。
  3. 性能

    • 如果需要處理大量的消息并且需要低延遲,可以考慮使用 Kafka,它是一個(gè)高吞吐量的消息中間件,適合大數(shù)據(jù)場(chǎng)景。
    • 如果對(duì)延遲要求較低,可以選擇 RabbitMQ、ActiveMQ 等傳統(tǒng)消息中間件。
  4. 社區(qū)支持和生態(tài)系統(tǒng)

    • 考慮選擇一個(gè)有活躍社區(qū)支持和完善生態(tài)系統(tǒng)的消息中間件,這樣可以更容易地解決問題和擴(kuò)展功能。
  5. 技術(shù)棧兼容性

    • 考慮選擇一個(gè)與你的技術(shù)棧兼容的消息中間件,避免出現(xiàn)集成上的問題。

綜合考慮以上因素,可以選擇最適合項(xiàng)目需求的消息中間件。

二. 定義消息格式和通信協(xié)議

定義消息格式和通信協(xié)議是使用消息中間件的關(guān)鍵步驟之一,它涉及到消息的結(jié)構(gòu)、內(nèi)容和交互方式。下面以 RabbitMQ 為例,演示如何定義消息格式和通信協(xié)議。

1. 定義消息格式

在 RabbitMQ 中,消息通常由兩部分組成:消息頭和消息體。消息頭包含一些元數(shù)據(jù)信息,如消息的類型、路由鍵等;消息體包含實(shí)際的業(yè)務(wù)數(shù)據(jù)。

消息頭
  • Content-Type:消息體的類型,如 application/json、text/plain 等。
  • DeliveryMode:消息持久性標(biāo)志,標(biāo)識(shí)消息是否需要持久化存儲(chǔ),可選值為 1(持久化)和 2(非持久化)。
  • CorrelationId:消息關(guān)聯(lián)標(biāo)識(shí),用于關(guān)聯(lián)一組相關(guān)消息。
  • 其他自定義的消息頭字段,根據(jù)業(yè)務(wù)需求定義。
消息體
  • 消息體可以是任意格式的數(shù)據(jù),如 JSON、XML、文本等,根據(jù)業(yè)務(wù)需求定義。

2. 定義通信協(xié)議

通信協(xié)議定義了消息的交互方式,包括消息的發(fā)送、接收和處理流程。通信協(xié)議可以包括以下幾個(gè)方面:

發(fā)送消息
  • 客戶端向消息隊(duì)列發(fā)送消息,包括指定交換機(jī)(Exchange)、路由鍵(Routing Key)和消息體。
接收消息
  • 服務(wù)端從消息隊(duì)列接收消息,根據(jù)消息的交換機(jī)和路由鍵接收對(duì)應(yīng)的消息。
消息處理
  • 客戶端接收到消息后,根據(jù)消息的內(nèi)容執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。

3. 示例代碼

定義消息格式
public class Message {
    private String content;
    private String contentType;
    private int deliveryMode;
    private String correlationId;

    // 省略getter和setter方法
}
發(fā)送消息
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class SendMessage {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            Message message = new Message();
            message.setContent("Hello, RabbitMQ!");
            message.setContentType("text/plain");
            message.setDeliveryMode(1); // 持久化
            message.setCorrelationId("123456");
            String messageJson = toJson(message);
            channel.basicPublish("", QUEUE_NAME, null, messageJson.getBytes());
            System.out.println(" [x] Sent '" + messageJson + "'");
        }
    }

    private static String toJson(Message message) {
        // 將 message 對(duì)象轉(zhuǎn)換成 JSON 格式的字符串
        return "{ \"content\": \"" + message.getContent() + "\", \"contentType\": \"" + message.getContentType() + "\", \"deliveryMode\": " + message.getDeliveryMode() + ", \"correlationId\": \"" + message.getCorrelationId() + "\" }";
    }
}
接收消息
import com.rabbitmq.client.*;

public class ReceiveMessage {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            System.out.println(" [*] Waiting for messages. To exit press Ctrl+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String messageJson = new String(delivery.getBody(), "UTF-8");
                Message message = fromJson(messageJson, Message.class);
                System.out.println(" [x] Received '" + messageJson + "'");
            };
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {
            });
        }
    }

    private static <T> T fromJson(String json, Class<T> clazz) {
        // 將 JSON 格式的字符串轉(zhuǎn)換成指定類型的對(duì)象
        // 這里可以使用 JSON 框架(如 Jackson、Gson)來實(shí)現(xiàn)
        return null;
    }
}

通過以上步驟,可以定義消息格式和通信協(xié)議,并使用 RabbitMQ 實(shí)現(xiàn)消息的發(fā)送和接收。

三、發(fā)布-訂閱模式

發(fā)布-訂閱模式是一種常見的消息傳遞模式,用于實(shí)現(xiàn)消息的廣播和訂閱。在發(fā)布-訂閱模式中,消息發(fā)布者將消息發(fā)布到一個(gè)主題(Topic),而消息訂閱者可以訂閱感興趣的主題,從而接收到相關(guān)消息。下面以 RabbitMQ 為例,演示如何使用發(fā)布-訂閱模式。

1. 定義發(fā)布-訂閱模式

在發(fā)布-訂閱模式中,有一個(gè)交換機(jī)(Exchange)用來接收發(fā)布者發(fā)布的消息,并根據(jù)訂閱者的綁定關(guān)系將消息路由到對(duì)應(yīng)的隊(duì)列。訂閱者可以創(chuàng)建自己的隊(duì)列,并將隊(duì)列綁定到交換機(jī)上,從而接收到發(fā)布者發(fā)布的消息。

2. 示例代碼

發(fā)布消息
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Publisher {

    private final static String EXCHANGE_NAME = "logs";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
            String message = "Hello, subscribers!";
            channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}
訂閱消息
import com.rabbitmq.client.*;

public class Subscriber {

    private final static String EXCHANGE_NAME = "logs";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
            String queueName = channel.queueDeclare().getQueue();
            channel.queueBind(queueName, EXCHANGE_NAME, "");

            System.out.println(" [*] Waiting for messages. To exit press Ctrl+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
            };
            channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {
            });
        }
    }
}

3. 運(yùn)行示例

  1. 先運(yùn)行訂閱者 Subscriber,它會(huì)創(chuàng)建一個(gè)隊(duì)列并綁定到交換機(jī)上,開始監(jiān)聽消息。
  2. 然后運(yùn)行發(fā)布者 Publisher,它會(huì)向交換機(jī)發(fā)布一條消息。
  3. 訂閱者會(huì)接收到發(fā)布者發(fā)布的消息,并輸出到控制臺(tái)。

通過以上步驟,可以實(shí)現(xiàn)基于 RabbitMQ 的發(fā)布-訂閱模式。

4. 異步處理消息

通過消息中間件實(shí)現(xiàn)異步處理消息,即發(fā)送消息后不需要立即等待結(jié)果,而是繼續(xù)執(zhí)行其他任務(wù)。這樣可以提高系統(tǒng)的響應(yīng)速度和吞吐量。

5. 解耦系統(tǒng)

通過消息中間件,系統(tǒng)之間的通信變成了基于消息的方式,系統(tǒng)不再直接依賴于對(duì)方的接口和實(shí)現(xiàn)細(xì)節(jié),從而實(shí)現(xiàn)了系統(tǒng)之間的解耦。

6. 實(shí)現(xiàn)步驟

  • 定義消息格式和通信協(xié)議:確定消息的格式和通信協(xié)議,包括消息的內(nèi)容結(jié)構(gòu)、消息的生命周期等。
  • 配置消息中間件:在系統(tǒng)中配置和啟動(dòng)消息中間件,確保消息中間件正常運(yùn)行。
  • 消息的發(fā)布和訂閱:編寫代碼實(shí)現(xiàn)消息的發(fā)布和訂閱邏輯,將消息發(fā)布到指定的主題,并訂閱感興趣的主題。
  • 處理接收到的消息:編寫代碼處理接收到的消息,根據(jù)消息的內(nèi)容執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。
  • 測(cè)試和驗(yàn)證:對(duì)系統(tǒng)進(jìn)行測(cè)試和驗(yàn)證,確保消息的發(fā)布、訂閱和處理功能正常運(yùn)行。

7. 實(shí)例場(chǎng)景

實(shí)例場(chǎng)景:電商系統(tǒng)訂單處理

場(chǎng)景描述

假設(shè)有一個(gè)電商系統(tǒng),包含訂單服務(wù)、庫存服務(wù)和物流服務(wù)。當(dāng)用戶下單時(shí),訂單服務(wù)需要通知庫存服務(wù)減少庫存,通知物流服務(wù)發(fā)貨。為了提高系統(tǒng)的可擴(kuò)展性和可靠性,我們可以使用消息中間件來實(shí)現(xiàn)訂單處理的異步通信和解耦。

實(shí)現(xiàn)步驟

  1. 定義消息格式和通信協(xié)議:定義訂單消息的格式,包括訂單號(hào)、商品信息等,并確定消息的交換機(jī)和隊(duì)列名稱。

  2. 配置消息中間件:在消息中間件中配置交換機(jī)和隊(duì)列,并確保消息的持久化。

  3. 訂單服務(wù)發(fā)送消息:訂單服務(wù)在用戶下單后,將訂單消息發(fā)送到消息隊(duì)列中。

  4. 庫存服務(wù)訂閱消息:庫存服務(wù)訂閱訂單消息隊(duì)列,接收并處理訂單消息,減少庫存。

  5. 物流服務(wù)訂閱消息:物流服務(wù)也訂閱訂單消息隊(duì)列,接收并處理訂單消息,進(jìn)行發(fā)貨。

示例代碼

訂單服務(wù)發(fā)送消息
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class OrderService {

    private static final String EXCHANGE_NAME = "orders";
    private static final String QUEUE_NAME = "order_queue";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "New order placed";
            channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}
庫存服務(wù)接收消息
import com.rabbitmq.client.*;

public class InventoryService {

    private static final String EXCHANGE_NAME = "orders";
    private static final String QUEUE_NAME = "order_queue";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");

            System.out.println(" [*] Waiting for orders. To exit press Ctrl+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
                // 處理訂單消息,減少庫存
            };
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
        }
    }
}
物流服務(wù)接收消息
import com.rabbitmq.client.*;

public class LogisticsService {

    private static final String EXCHANGE_NAME = "orders";
    private static final String QUEUE_NAME = "order_queue";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");

            System.out.println(" [*] Waiting for orders. To exit press Ctrl+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
                // 處理訂單消息,發(fā)貨
            };
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
        }
    }
}

通過以上步驟的簡(jiǎn)單演示,訂單服務(wù)可以異步發(fā)送訂單消息,庫存服務(wù)和物流服務(wù)可以訂閱訂單消息并處理,實(shí)現(xiàn)了訂單處理的異步通信和解耦。

通過以上步驟,可以使用消息中間件實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性。文章來源地址http://www.zghlxwxcb.cn/news/detail-826575.html

到了這里,關(guān)于使用消息中間件實(shí)現(xiàn)系統(tǒng)間的異步通信和解耦的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [中間件] RabbitMQ 的 Exchange 和 Queue 綁定:實(shí)現(xiàn)高效消息傳遞的關(guān)鍵步驟

    [中間件] RabbitMQ 的 Exchange 和 Queue 綁定:實(shí)現(xiàn)高效消息傳遞的關(guān)鍵步驟

    前言: 當(dāng)今大多數(shù)分布式系統(tǒng)都需要進(jìn)行異步消息傳遞,而 RabbitMQ 作為開源的消息隊(duì)列系統(tǒng),提供了一個(gè)高效的消息傳遞方案。但是在使用 RabbitMQ 進(jìn)行消息傳遞時(shí),如何正確綁定 Exchange 和 Queue 是十分重要的。本文將從 RabbitMQ Exchange 和 Queue 的定義、Exchange 和 Queue 綁定的目

    2024年04月15日
    瀏覽(35)
  • 【中間件】消息中間件之Kafka

    一、概念介紹 Apache Kafka是一個(gè)分布式流處理平臺(tái),用于構(gòu)建實(shí)時(shí)數(shù)據(jù)管道和流應(yīng)用。它可以處理網(wǎng)站、應(yīng)用或其他來源產(chǎn)生的大量數(shù)據(jù)流,并能實(shí)時(shí)地將這些數(shù)據(jù)流傳輸?shù)搅硪粋€(gè)系統(tǒng)或應(yīng)用中進(jìn)行處理。 核心概念: Topic(主題) :消息的分類,用于區(qū)分不同的業(yè)務(wù)消息。

    2024年01月20日
    瀏覽(43)
  • 微服務(wù)中間件--MQ服務(wù)異步通信

    微服務(wù)中間件--MQ服務(wù)異步通信

    MQ的一些常見問題 消息可靠性問題 消息從發(fā)送,到消費(fèi)者接收,會(huì)經(jīng)歷多個(gè)過程: 其中的每一步都可能導(dǎo)致消息丟失,常見的丟失原因包括: 發(fā)送時(shí)丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收到消息后未消費(fèi)就宕機(jī)

    2024年02月11日
    瀏覽(25)
  • RabbitMQ 消息中間件 消息隊(duì)列

    RabbitMQ 消息中間件 消息隊(duì)列

    RabbitMQ 1、RabbitMQ簡(jiǎn)介 RabbiMQ是?Erang開發(fā)的,集群?常?便,因?yàn)镋rlang天?就是??分布式語?,但其本身并 不?持負(fù)載均衡。支持高并發(fā),支持可擴(kuò)展。支持AJAX,持久化,用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。 2、RabbitMQ 特點(diǎn) 可

    2024年02月03日
    瀏覽(93)
  • 【消息中間件】詳解mq消息積壓

    【消息中間件】詳解mq消息積壓

    作者簡(jiǎn)介 目錄 1.產(chǎn)生原因 2.解決辦法 2.1.事前處理機(jī)制 2.2.事中處理機(jī)制 2.3.事后處理機(jī)制 消息積壓(Message Backlog)指的是在消息隊(duì)列(MQ)系統(tǒng)中等待被處理的消息數(shù)量超過了正常的處理速度,導(dǎo)致消息在隊(duì)列中積壓堆積的情況。 消息積壓的常見表現(xiàn): 系統(tǒng)資源使用率上升

    2024年02月07日
    瀏覽(31)
  • 常用消息中間件

    常用消息中間件

    RocketMQ ? 阿里開源,阿里參照kafka設(shè)計(jì)的,Java實(shí)現(xiàn) ? 能夠保證嚴(yán)格的消息順序 ? 提供針對(duì)消息的過濾功能 ? 提供豐富的消息拉取模式 ? 高效的訂閱者水平擴(kuò)展能力 ? 實(shí)時(shí)的消息訂閱機(jī)制 ? 億級(jí)消息堆積能力 ? RabbitMQ Erlang實(shí)現(xiàn),非常重量級(jí),更適合于企業(yè)級(jí)的開發(fā)。同時(shí)實(shí)

    2024年02月08日
    瀏覽(17)
  • 消息中間件面試題

    消息中間件面試題

    異步發(fā)送(驗(yàn)證碼、短信、郵件…) MYSQL和Redis,ES之間的數(shù)據(jù)同步 分布式事務(wù) 削峰填谷 RabbitMQ如何保證消息不丟失? 開啟生產(chǎn)者確認(rèn)機(jī)制,確保生產(chǎn)者的消息能到達(dá)隊(duì)列 開啟持久化功能,確保消息未消費(fèi)前在隊(duì)列中不會(huì)丟失 開啟消費(fèi)者確認(rèn)機(jī)制為auto,由spring確認(rèn)消息處理成

    2024年02月12日
    瀏覽(26)
  • 常見消息中間件分享

    常見消息中間件分享

    消息中間件是基于隊(duì)列與消息傳遞技術(shù),在網(wǎng)絡(luò)環(huán)境中為應(yīng)用系統(tǒng)提供同步或異步、可靠的消息傳輸?shù)闹涡攒浖到y(tǒng)。 消息中間件的使用有幾個(gè)核心角色,如下圖所示: Producer 生產(chǎn)者 :負(fù)責(zé)生產(chǎn)消息,將消息發(fā)送到消息隊(duì)列中。 Consumer 消費(fèi)者 :負(fù)責(zé)消費(fèi)使用消息,從消

    2024年02月21日
    瀏覽(40)
  • 消息中間件-面試題

    消息中間件-面試題

    消息不重復(fù) 生產(chǎn)者控制 消費(fèi)者冪等 消息不丟失 生產(chǎn)者發(fā)送,要確認(rèn)broker收到并持久化 broker確認(rèn)消費(fèi)者消費(fèi)完,再刪除消息 Kafka是一種高吞吐量、分布式、基于發(fā)布/訂閱的消息中間件,是Apache的開源項(xiàng)目。 broker: Kafka服務(wù)器,負(fù)責(zé)消息存儲(chǔ)和轉(zhuǎn)發(fā) topic:消息類別,Kafka按照

    2024年02月21日
    瀏覽(18)
  • 消息隊(duì)列中間件介紹

    消息隊(duì)列中間件介紹

    消息隊(duì)列介紹 ? 消息隊(duì)列中間件是大型系統(tǒng)中的重要組件,已經(jīng)逐漸成為企業(yè)系統(tǒng)內(nèi)部通信的核心手段。它具有松耦合、異步消息、流量削峰、可靠投遞、廣播、流量控制、最終一致性等一系列功能,已經(jīng)成為異步RPC的主要手段之一。 目前常見的消息中間件有ActiveMQ、Rabbi

    2024年02月04日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包