最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot對接minio的webhook完整步驟記錄

 更新時間:2024年07月20日 11:48:58   作者:碼農(nóng)下的天橋  
Minio是一款開源的對象存儲服務(wù),它致力于為開發(fā)者提供簡單、高性能、高可用的云存儲解決方案,下面這篇文章主要給大家介紹了關(guān)于springboot對接minio的webhook的相關(guān)資料,需要的朋友可以參考下

前言

近日需要將minio的apache2.0版本給用起來,順便要完善一下原有的文件上傳管理系統(tǒng),其中很重要的一點(diǎn)是,在原有客戶端直傳的基礎(chǔ)上,再添加 minio 的上傳回調(diào)給服務(wù)端做后續(xù)處理。

本文重點(diǎn)在于,介紹整個minio與springboot對接webhook過程。

ps:minio-2021-04-22,mc-2021-04-22 是我從源代碼編譯出來的最后一個apache2.0版本,無視即可,可以直接從官網(wǎng)下載再新版—除非你也想折騰。

minio的啟動以及賬號密碼設(shè)置

啟動腳本如下:

#!/bin/sh
mkdir uploads
mkdir configs
touch log.log
export MINIO_ROOT_USER='minio' ##這是管理賬號,請根據(jù)實際自行設(shè)定
export MINIO_ROOT_PASSWORD='123456' ##這是密碼,請根據(jù)實際自行設(shè)定
export MINIO_BROWSER=on
nohup ./minio-2021-04-22 server --address ":9000"  ./uploads >> log.log 2>&1 &
## :9000 表示監(jiān)聽端口9000, ./uploads 指定當(dāng)前文件夾下面的子文件夾 uploads為文件存儲目錄。
tail -f log.log

先進(jìn)行啟動:

那么來了,使用mc來進(jìn)行管理。首先要明確一點(diǎn)就是:

mc 第一次啟動時不知道你的minio實例在哪里的,你需要指定,設(shè)置一下minio實例以及賬號密碼,例如:

## -- 首先,需要設(shè)置 別名--- 就是如何訪問某個minio實例,例如:
mc alias set myminio https://myminio.example.net minioadminuser minioadminpassword
具體到本文提到的服務(wù),那就是:
./mc-2021-04-22 alias set myminio http://127.0.0.1:9000 'minio' '123456'

ps:切記!??!只有你指定了具體的minio鏈接方式才能對minio進(jìn)行管理的。

好了,看看是不是有webhook設(shè)置了:

./mc-2021-04-22 admin config get myminio  notify_webhook

如果沒有設(shè)置過的話可以看到:

notify_webhook enable=off endpoint= auth_token= queue_limit=0 queue_dir= client_cert= client_key=

在對minio設(shè)置webhook之前,切回到springboot,我們先寫一段代碼用于接收minio的調(diào)用,注意,必須能夠訪問到的,否則后續(xù)的步驟是走不下去的

springBoot實際接收action

偽代碼如下:

@Api(tags="上傳接口")
@Controller("/api/appUpload")
@RequestMapping(value = "/api/appUpload",produces = "application/json; charset=utf-8")
public class AppUploadController {
    private static final String logName="文件控制器";
    private static final Logger logger= LoggerFactory.getLogger(logName);

    /*****
     * 規(guī)則:
     * 例如,如果是從minio過來的webhook,就用:
     * /webhooks/minio/uploadedFinish 這些
     * aliyun的用:
     * /webhooks/ali/uploadedFinish
     * ****/
    @ApiOperation(value = "webhook回調(diào)")
    @RequestMapping(value = "/webhooks/{uploadType}/{hookName}",
            method = RequestMethod.POST)
    @ResponseBody
    public OpResult webhooks(
            HttpServletRequest request
            , HttpServletResponse response
            ,@PathVariable("uploadType") String uploadType
            ,@PathVariable("hookName") String hookName
            ,@RequestBody HashMap params

    ) {

        if(params==null||params.size()<1){
            return OpResult.success("");
        }
        String auth=request.getHeader("Authorization");
        //顯示結(jié)果:uploadType:minio,hookName:uploadFinish,auth:Bearer test
        logger.info("uploadType:{},hookName:{},auth:{}",uploadType,hookName,auth);
        logger.info("{}", JSONObject.toJSONString(params));

        if(uploadType.equalsIgnoreCase("minio")){
        /****TODO:****/
          
        }
        return OpResult.success();
    }
}

簡單介紹一下這個action。

就是一個白板,有兩個path參數(shù),分別是uploadType–可以是阿里云或者minio,這是為了以后預(yù)留的,而后面就是真實的hookname了—也是為了后面預(yù)留的,因為可能有deleted,modified之類的。

方法體什么都沒做,就是打印了uploadType,hookName,還有 minio調(diào)用之后傳過來的authority頭以及request body參數(shù)。

假定,這個action的訪問url現(xiàn)在是:

http://localhost:9608/app-base/api/appUpload/webhooks/{uploadType}/{hookName}

好了,springboot部分基本結(jié)束----實際業(yè)務(wù)得你自行接入完善。

mc正式設(shè)置webhook

mc設(shè)置webhook的命令格式如下:

mc admin config set {minio實例名稱} notify_webhook:{webhook規(guī)則名稱} endpoint="{回調(diào)的url地址,必須確保能夠訪問到}" auth_token="{這算是身份密令了與業(yè)務(wù)系統(tǒng)有關(guān)自行設(shè)置}" queue_dir="{對回調(diào)請求進(jìn)行持久化,保存到的文件目錄,必須為絕對路徑,不接受相對路徑}" queue_limit="{最大保存多少個回調(diào)請求}"

好了,那么對于本文, 命令如下:

./mc-2021-04-22 admin config set myminio notify_webhook:fs_uploaded_hook  endpoint="http://localhost:9608/app-base/api/appUpload/webhooks/minio/uploadFinish" auth_token="test" queue_dir="$(pwd)/queues/fs_uploaded_hook" queue_limit="10000"

## 補(bǔ)充說明 $(pwd)表示獲取當(dāng)前文件的根目錄,例如,
如果是在 /home/testA/minio 下面執(zhí)行命令的話,那么:
$(pwd) = /home/testA/minio
而queue_dir的值就是:
/home/testA/minio/queues/fs_uploaded_hook
使用 $(pwd) 可以解決每次都要手動輸入絕對路徑的問題。

好了,需要重啟一下服務(wù),然后再查看是不是設(shè)置成功:

./mc-2021-04-22 admin config get myminio  notify_webhook

下面來重點(diǎn)了,上面的步驟只是保證了你添加了一個叫做

fs_uploaded_hook

的 webhook規(guī)則,規(guī)定了回調(diào)的url等等,minio里面的bucket還沒有應(yīng)用到這個規(guī)則上,你需要為bucket指定應(yīng)用規(guī)則才行。
指定bucket應(yīng)用規(guī)則的命令為:

mc event add {受管控的minio實例名稱}/{bucket名稱} arn:minio:sqs::{剛才你添加的規(guī)則名稱}:webhook -p --event {可以是put,delete等} --suffix '.*'(適用的后綴名,可以設(shè)置 .* 表示全部)

假設(shè)目前的minio的bucket有:

那么,實際上執(zhí)行命令就是:

./mc-2021-04-22 event add myminio/files arn:minio:sqs::fs_uploaded_hook:webhook -p --event put --suffix '.*'
./mc-2021-04-22 event add myminio/test-files arn:minio:sqs::fs_uploaded_hook:webhook -p --event put --suffix '.*'

驗證是否成功設(shè)置:

./mc-2021-04-22 event list myminio/files
./mc-2021-04-22 event list myminio/test-files

好了,設(shè)置成功了。

驗證聯(lián)調(diào)

下面上傳一個文件到某個bucket,然后看看是不是真的會調(diào)用webhook,執(zhí)行邏輯:
ps:mc可以直接上傳文件到minio的,例如:

./mc-2021-04-22 cp  favicon.png myminio/files

返回看看springBoot的輸出:

下面順便將輸出的json字符串格式化貼出來,方便以后調(diào)試整理:

{
        "EventName": "s3:ObjectCreated:Put",
        "Records": [{
            "eventVersion": "2.0",
            "eventSource": "minio:s3",
            "awsRegion": "",
            "eventTime": "2024-04-03T09:34:01.211Z",
            "eventName": "s3:ObjectCreated:Put",
            "userIdentity": {"principalId": "fileadmin"},
            "requestParameters": {"principalId": "fileadmin", "region": "", "sourceIPAddress": "127.0.0.1"},
            "responseElements": {
                "content-length": "0",
                "x-amz-request-id": "17C2BB62C324CD16",
                "x-minio-deployment-id": "fe30defd-c85c-48a4-adb5-7482c30696d4",
                "x-minio-origin-endpoint": "http://127.0.0.1:9000"
            },
            "s3": {
                "s3SchemaVersion": "1.0",
                "configurationId": "Config",
                "bucket": {"name": "files", "ownerIdentity": {"principalId": "fileadmin"}, "arn": "arn:aws:s3:::files"},
                "object": {
                    "key": "favicon.png",
                    "size": 2423,
                    "eTag": "7d1e98521f3bbf904511cacf4517d55d",
                    "contentType": "image/png",
                    "userMetadata": {"content-type": "image/png"},
                    "sequencer": "17C2BB62C34659DD"
                }
            },
            "source": {
                "host": "127.0.0.1",
                "port": "",
                "userAgent": "MinIO (linux; amd64) minio-go/v7.0.11 mc-2021-04-22/DEVELOPMENT.GOGET"
            }
        }],
        "Key": "files/favicon.png"
    }

總結(jié) 

到此這篇關(guān)于springboot對接minio的webhook的文章就介紹到這了,更多相關(guān)springboot對接minio的webhook內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于idea2020.3升級lombok不能使用的問題

    關(guān)于idea2020.3升級lombok不能使用的問題

    這篇文章主要介紹了關(guān)于idea2020.3升級lombok不能使用的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 一文掌握spring cloud gateway(總結(jié)篇)

    一文掌握spring cloud gateway(總結(jié)篇)

    Spring Cloud Gateway是Spring Cloud的全新項目,該項目是基于Spring 5.0,Spring WebFlux和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式,本文通過實例代碼總結(jié)介紹spring cloud gateway的相關(guān)知識,感興趣的朋友一起看看吧
    2024-12-12
  • Java的Spring框架中實現(xiàn)發(fā)送郵件功能的核心代碼示例

    Java的Spring框架中實現(xiàn)發(fā)送郵件功能的核心代碼示例

    這篇文章主要介紹了Java的Spring框架中實現(xiàn)發(fā)送郵件功能的核心代碼示例,包括發(fā)送帶附件的郵件功能的實現(xiàn),需要的朋友可以參考下
    2016-03-03
  • Java實現(xiàn)一鍵將Word文檔轉(zhuǎn)為PDF

    Java實現(xiàn)一鍵將Word文檔轉(zhuǎn)為PDF

    在開發(fā)中,經(jīng)常會碰到需要把 Word 文檔轉(zhuǎn)換成 PDF 格式的需求,Java 有不少好用的庫能實現(xiàn)這個功能,本文為大家介紹了兩個常用的方法,需要的可以了解下
    2025-02-02
  • idea項目結(jié)構(gòu)中不顯示out文件夾的解決

    idea項目結(jié)構(gòu)中不顯示out文件夾的解決

    本文通過圖片的方式詳細(xì)解釋操作步驟,使讀者能夠更直觀更方便地理解和執(zhí)行操作,同時,文章末尾祝福讀者步步高升,一帆風(fēng)順,展現(xiàn)了作者的人情味和親和力,整體來說,這是一篇簡單易懂、實用性強(qiáng)的操作指南
    2024-10-10
  • java 如何將多種字符串格式 解析為Date格式

    java 如何將多種字符串格式 解析為Date格式

    這篇文章主要介紹了java 如何將多種字符串格式 解析為Date格式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot整合FastJson過程解析

    SpringBoot整合FastJson過程解析

    這篇文章主要介紹了SpringBoot整合FastJson過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • java Signleton模式詳解及示例代碼

    java Signleton模式詳解及示例代碼

    Singleton模式是創(chuàng)建模式。這種模式只涉及一個類是負(fù)責(zé)創(chuàng)建自己的對象。該類確保只有一個對象獲得創(chuàng)建。這個類提供了一種方法來訪問它的唯一對象
    2016-10-10
  • javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實例

    javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實例

    這篇文章主要介紹了使用java web 連接MySQL數(shù)據(jù)庫的驅(qū)動方法的相關(guān)知識,本文介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • 使用spring boot 整合kafka,延遲啟動消費(fèi)者

    使用spring boot 整合kafka,延遲啟動消費(fèi)者

    這篇文章主要介紹了使用spring boot 整合kafka,延遲啟動消費(fèi)者的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

兴城市| 吐鲁番市| 调兵山市| 湟中县| 伊金霍洛旗| 甘谷县| 万州区| 普洱| 兴城市| 上虞市| 新安县| 克什克腾旗| 岚皋县| 堆龙德庆县| 石首市| 九江县| 正蓝旗| 百色市| 盐山县| 潞城市| 敖汉旗| 涪陵区| 丽水市| 肇州县| 会同县| 资兴市| 富裕县| 行唐县| 襄樊市| 郧西县| 南投市| 文成县| 扬中市| 星子县| 盐亭县| 织金县| 文山县| 晋州市| 茌平县| 胶州市| 潜江市|