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

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類}

這篇具有很好參考價值的文章主要介紹了項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類}。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

?一、創(chuàng)建項目

二、創(chuàng)建核心類

?? 1、?編寫交換機類,Exchange

?? 2、編寫存儲消息的隊列,MSGQueue

?? 3、編寫綁定類,binding

?? 4、編寫消息,Message


?一、創(chuàng)建項目

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

?項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

二、創(chuàng)建核心類

代碼解釋主要在注釋上面,注意一下注釋

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

核心類主要是在服務器模塊中的。?

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

主要是以下幾個類

*?交換機 exchange

* 隊列 queue

* 綁定 binding?

* 消息message

項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言


?? 1、?編寫交換機類,Exchange

首先編寫一個交換機類型的類,ExchangeType

是一個枚舉類型。

public enum ExchangeType {
    DIRECT(0),
    FANOUT(1),
    TOPIC(2);
    private final int type;

    private ExchangeType(int type){
        this.type = type;
    }
}

下面我這里直接用了Lombok的@Data組合注解注解代替了getter和setter方法,不了解的可以直接generate生產(chǎn)getter和setter方法,然后

關(guān)于Lombok不理解的可以參考SpringBoot日志文件_??藿香正氣水的博客-CSDN博客,使用需要另外在pom.xml文件添加Lombok依賴

/*
* 表示一個交換機
* */
@Data
public class Exchange {
//    此處使用name,來作為交換機的身份標識(是唯一的)
    private String name;
//    交換機類型:DIRECT,FANOUT,TOPIC
//    使用枚舉類型來表示
    private ExchangeType type = ExchangeType.DIRECT;

//    表示該交換機是否要持久化存儲,true表示需要持久化;false表示不必持久化
//    有的數(shù)據(jù)是需要持久化存儲的,有的不要。所以設置一個開關(guān),
//    用戶在使用的時候就可以選擇是否真的需要持久化操作
    private boolean durable = false;
}

?? 2、編寫存儲消息的隊列,MSGQueue

/*
 * 表示一個存儲消息的隊列
 * MSG => Message
 * */
public class MSGQueue {
//    表示隊列的身份標識
    private String name;
//    標識隊列是否持久化,true標識持久化保存,false標識不持久化
    private boolean durable;
}

?? 3、編寫綁定類,binding

/*
* 表示隊列和交換機之間的關(guān)聯(lián)關(guān)系
* */
@Data
public class Binding {
//    binding依附于Exchange和Queue
//    binding和交換機和隊列有關(guān),所以就需要定義這兩個name
    private String exchangeName;
    private String queueName;

//    bindingKey,匹配了才能綁定
    private String bindingKey;
}

?? 4、編寫消息,Message

?主要包含兩個部分:

? ? ? ? * 屬性部分

????????????????關(guān)于屬性部分,創(chuàng)建一個BasicProperties類,編寫message的屬性:

? ? ? ? ? ? ? ? ? ? ? ? 關(guān)于三種交換機機型,參考項目實戰(zhàn) — 消息隊列(1) {需求分析}_??藿香正氣水的博客-CSDN博客

@Data
public class BasicProperties {
//    消息的唯一身份標識,
//    此處要保證id唯一性,使用UUID來作為messageif
    private String messageId;
//    消息上帶有的內(nèi)容,和bindingKey做匹配
//    如果當前的交換機型是DIRECT,此時roitingkey就標識要轉(zhuǎn)發(fā)的隊列名
//    如果當前的交換機型是FANOUT,此時roitingkey就無意義
//    如果當前的交換機型是TOPIC,此時roitingkey就要和bindingKey做匹配,符合要求才能轉(zhuǎn)發(fā)
    private String routingKey;

//    這個屬性表示消息是否要持久化,1標識不持久化 ,2標識持久化
    private int deliverMode = 1;
    
}

? ? ? ? * 正文部分

????????????項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類},項目,java,開發(fā)語言

/*
* 表示一個要傳遞的消息
* 主要包含兩個部分,一個屬性部分,一個正文部分
* 屬性部分BasicProperties
* 正文部分byte[]
* * 此處的Message是需要能夠在網(wǎng)絡中傳輸?shù)?還要寫入到文件中
 * 所以需要針對Message進行序列化和反序列化,使用標準庫自帶的序列化/反序列化操作
* */
@Data
public class Message implements Serializable {  //實現(xiàn)該接口,就能實現(xiàn)序列化/反序列化,不需要重寫其中的任何方法
    private BasicProperties basicProperties;
    private byte[] body;

//    下面是輔助性屬性
//    Message后續(xù)會存儲到文件中(持久化)
//    一個文件中會存儲很多消息,
//    消息的具體位置使用下面的兩個偏移量來進行表示
//    [offsetBegin,offsetEnd)
//    這兩個屬性,主要是為了讓內(nèi)存中的Message對象,能夠快速的找到對應的硬盤上的Message的位置
//    所以并不需要被序列化保存到文件中,該消息一旦被寫入到文件之后,所有消息就固定了,并不需要被單獨存儲
//    加上transient這兩個屬性就不會被序列化
    private transient long offsetBegin = 0;   //消息數(shù)據(jù)的開頭距離文件開頭的位置偏移(字節(jié))
    private transient long offsetEnd = 0;     //消息數(shù)據(jù)的結(jié)尾距離文件開始的位置偏移(字節(jié))

//    使用這個屬性表示該消息在文件中是否是有效的消息(邏輯刪除)
//    0x1表示有效,0x0表示無效
//    邏輯刪除就是,刪除數(shù)據(jù)不是真的刪除,而是把需要刪除的信息標記成無效
    private byte  isValid = 0x1;

//      創(chuàng)建一個工廠方法,讓工廠方法幫我們封裝以下Message對象的過程
//    該方法創(chuàng)建的Message對象,會自動生成唯一的MessageId
//    如果routingKey和basicProperties里面的routingKey沖突,以外面的為主
    public static  Message createMessageWithId(String routingKey,BasicProperties basicProperties,byte[] body){
        Message message = new Message();
        if(basicProperties != null){
            message.setBasicProperties(basicProperties);
        }
//        此處生成的MessageId以M-作為前綴
//        為了和后續(xù)別的uid進行區(qū)分
        message.setMessageId("M-"+ UUID.randomUUID());
        message.basicProperties.setRoutingKey(routingKey);
        message.body = body;

//        此處主要是把消息和body和屬性設置出來,是Message的核心內(nèi)容
//        其他的offsetBegin等是在消息持久化的時候才會用到
        return message;
    }


//    下面設置一些getter和Setter方法拿到
    public String getMessageId(){
        return basicProperties.getMessageId();
    }

    public void setMessageId(String messageId){
        basicProperties.setMessageId(messageId);
    }

//    routingKey讓消息和bindingKey做匹配
    public String getRoutingKey(){
        return basicProperties.getRoutingKey();
    }

    public void setRoutingKey(String routingKey){
        basicProperties.setRoutingKey(routingKey);
    }

//    deliverMode是為了判斷該消息是否要持久化
    public int getDeliverMode(){
        return basicProperties.getDeliverMode();
    }

    public void setDeliverMode(int mode){
        basicProperties.setDeliverMode(mode);
    }
}

2023-7-31

修改:binding類中,exchangename => exchangeName

?2023-8-06

修改:Message類中,getMessage() => getMessageId()文章來源地址http://www.zghlxwxcb.cn/news/detail-618971.html

到了這里,關(guān)于項目實戰(zhàn) — 消息隊列(2){創(chuàng)建核心類}的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 項目實戰(zhàn) — 消息隊列(1) {需求分析}

    項目實戰(zhàn) — 消息隊列(1) {需求分析}

    目錄 一、什么是消息隊列 二、需求分析 ??1、核心概念 ???2、核心API ??3、交換機類型 ?? 4、持久化 ??5、網(wǎng)絡通信? ??6、應答模式 三、模塊劃分 四、測試用例設計 五、總結(jié) 消息隊列(Message Queue ,MQ),就是將阻塞隊列的數(shù)據(jù)結(jié)構(gòu),提取成了一個程序,獨立進行部署。

    2024年02月15日
    瀏覽(20)
  • 項目實戰(zhàn) — 消息隊列(5){統(tǒng)一硬盤操作}

    項目實戰(zhàn) — 消息隊列(5){統(tǒng)一硬盤操作}

    前面已經(jīng)使用數(shù)據(jù)庫管理了交換機、綁定、隊列,然后又使用了數(shù)據(jù)文件管理了消息。 那么,這里就創(chuàng)建一個類,講之前的兩個部分整合起來,對上層提供統(tǒng)一的一套接口,表示硬盤上存儲的所有的類的信息。 ?創(chuàng)建了這個類,我們就不用去直接調(diào)用DataBaseManager和MessageFile

    2024年02月14日
    瀏覽(19)
  • 項目實戰(zhàn) — 消息隊列(8){網(wǎng)絡通信設計①}

    項目實戰(zhàn) — 消息隊列(8){網(wǎng)絡通信設計①}

    目錄 一、自定義應用層協(xié)議 ?? 1、格式定義 ?? 2、準備工作 ??定義請求和響應? ??? 定義BasicArguments ?? 定義BasicReturns ?? 2、創(chuàng)建參數(shù)類 ?????????? 交換機 ?????????? 隊列 ?????????? 綁定 ? ? ? ? ??發(fā)布消息 ? ? ? ? ?? 訂閱消息 ? ? ? ? ??確認應答

    2024年02月13日
    瀏覽(17)
  • 【項目實戰(zhàn)】SpringBoot整合Kafka消息隊列(基于KafkaTemplate和@KafkaListener實現(xiàn))

    【項目實戰(zhàn)】SpringBoot整合Kafka消息隊列(基于KafkaTemplate和@KafkaListener實現(xiàn))

    Apache Kafka是分布式發(fā)布-訂閱消息系統(tǒng)。 它最初由LinkedIn公司開發(fā),之后成為Apache項目的一部分。 Kafka是一種快速、可擴展的、設計內(nèi)在就是分布式的,分區(qū)的和可復制的提交日志服務。 Apache Kafka與傳統(tǒng)消息系統(tǒng)相比,有以下不同: 它將消息持久化到磁盤,因此可用于批量消

    2023年04月09日
    瀏覽(26)
  • 【系統(tǒng)開發(fā)】尚硅谷 - 谷粒商城項目筆記(七):消息隊列

    【系統(tǒng)開發(fā)】尚硅谷 - 谷粒商城項目筆記(七):消息隊列

    Docker中安裝 下載鏡像: docker pull rabbitmq:management 創(chuàng)建實例并啟動: 4369 – erlang發(fā)現(xiàn)口 5672 --client端通信口 15672 – 管理界面ui端口 25672 – server間內(nèi)部通信口 在web瀏覽器中輸入地址:http://服務器ip:15672/ 輸入默認賬號: guest : guest overview :概覽 connections :無論生產(chǎn)者還是消費者

    2024年02月12日
    瀏覽(26)
  • Java開發(fā) - 消息隊列之RabbitMQ初體驗

    Java開發(fā) - 消息隊列之RabbitMQ初體驗

    目錄 前言 RabbitMQ 什么是RabbitMQ RabbitMQ特點 安裝啟動 RabbitMQ和Kafka的消息收發(fā)區(qū)別 RabbitMQ使用案例 添加依賴 添加配置 創(chuàng)建RabbitMQ配置類 RabbitMQ消息的發(fā)送 RabbitMQ消息的接收 測試 結(jié)語 前一篇,我們學習了Kafka的基本使用,這一篇,我們來學習RabbitMQ。他們作為消息隊列本身都具

    2024年02月03日
    瀏覽(21)
  • 架構(gòu)核心技術(shù)之分布式消息隊列

    架構(gòu)核心技術(shù)之分布式消息隊列

    Java全能學習+面試指南:https://javaxiaobear.cn 今天我們來學習分布式消息隊列,分布式消息隊列的知識結(jié)構(gòu)如下圖。 主要介紹以下內(nèi)容: 同步架構(gòu)和異步架構(gòu)的區(qū)別。異步架構(gòu)的主要組成部分:消息生產(chǎn)者、消息消費者、分布式消息隊列。異步架構(gòu)的兩種主要模型:點對點模型

    2024年02月07日
    瀏覽(24)
  • 消息隊列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費調(diào)試

    消息隊列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費調(diào)試

    1)什么是 MQ MQ (message queue),從字面意思上看, 本質(zhì)是個隊列,F(xiàn)IFO 先入先出 ,只不過隊列中存放的內(nèi)容是 message 而已,還是一種 跨進程的通信機制 , 用于上下游傳遞消息 。在互聯(lián)網(wǎng)架構(gòu)中,MQ 是一種非常常見的上下游 “ 邏輯解耦 + 物理解耦” 的消息通信服務 。 使用了

    2024年02月20日
    瀏覽(28)
  • 【圖解RabbitMQ-3】消息隊列RabbitMQ介紹及核心流程

    【圖解RabbitMQ-3】消息隊列RabbitMQ介紹及核心流程

    ?????作者名稱:DaenCode ??作者簡介:CSDN實力新星,后端開發(fā)兩年經(jīng)驗,曾擔任甲方技術(shù)代表,業(yè)余獨自創(chuàng)辦智源恩創(chuàng)網(wǎng)絡科技工作室。會點點Java相關(guān)技術(shù)棧、帆軟報表、低代碼平臺快速開發(fā)。技術(shù)尚淺,閉關(guān)學習中······ ??人生感悟:嘗盡人生百味,方知世間冷暖。

    2024年02月09日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包