(一)Eshop(異常處理中間件/grpc)


文章目錄

  • 項目地址
  • 一、異常處理
    • 1.1 自定異常
    • 1.2 自定義異常處理中間件
    • 1.3 注冊中間件
  • 二、grpc服務
    • 2.1 創建protos
      • 1. 打折的protos
      • 2. 設置grpc server
      • 3. program配置服務
      • 4. docker-compose
    • 2.2 CRUD
      • 1. 查詢
    • 2.3 測試
      • 1. 發起查詢請求
  • 三、grpc服務消費
    • 3.1 創建client
      • 1. 添加服務
      • 2. 選擇需要添加的服務類型
      • 3. 選擇服務路徑
      • 4. 添加成功后
      • 5. Program里添加Client服務
      • 6. appSettings里添加grpc服務地址
    • 3.2 grpc通訊
      • 1. 在StoreBasketCommandHandler使用


項目地址

  • 教程作者:
  • 教程地址:
  • 代碼倉庫地址:
  • 所用到的框架和插件:
dbt 
airflow

一、異常處理

1.1 自定異常

  • BadRequestException
  • InternalServerException
  • NotFoundException

在這里插入圖片描述

1.2 自定義異常處理中間件

  • 異常處理中間件
public class CustomExceptionHandler(ILogger<CustomExceptionHandler> logger): IExceptionHandler
{public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken){logger.LogError("Error Message: {exceptionMessage}, Time of occurrence {time}",exception.Message, DateTime.UtcNow);(string Detail, string Title, int StatusCode) details = exception switch{InternalServerException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status500InternalServerError),ValidationException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status400BadRequest),BadRequestException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status400BadRequest),NotFoundException =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status404NotFound),_ =>(exception.Message,exception.GetType().Name,context.Response.StatusCode = StatusCodes.Status500InternalServerError)};var problemDetails = new ProblemDetails{Title = details.Title,Detail = details.Detail,Status = details.StatusCode,Instance = context.Request.Path};problemDetails.Extensions.Add("traceId", context.TraceIdentifier);if (exception is ValidationException validationException){problemDetails.Extensions.Add("ValidationErrors", validationException.Errors);}await context.Response.WriteAsJsonAsync(problemDetails, cancellationToken: cancellationToken);return true;}
}
  • 返回例
{"title": "ValidationException","detail": "參數驗證失敗","status": 400,"instance": "/api/products","traceId": "00-9d4a78437e-abc123def456-01","ValidationErrors": [{"PropertyName": "Name","ErrorMessage": "Name 不能為空"},{"PropertyName": "Age","ErrorMessage": "Age 必須大于 0"}]
}

1.3 注冊中間件

  • 給所有微服務注冊
    在這里插入圖片描述

二、grpc服務

土耳其146

  • 這里主要實現了discount模塊的grpc,我們可以通過api進行增刪改查

2.1 創建protos

在這里插入圖片描述

1. 打折的protos

  • 定義請求和返回值
syntax = "proto3";option csharp_namespace = "Discount.Grpc";package discount;// The discount service definition.
service DiscountProtoService {// Discount CRUD Operationsrpc GetDiscount (GetDiscountRequest) returns (CouponModel);rpc CreateDiscount (CreateDiscountRequest) returns (CouponModel);rpc UpdateDiscount (UpdateDiscountRequest) returns (CouponModel);rpc DeleteDiscount (DeleteDiscountRequest) returns (DeleteDiscountResponse);
}message GetDiscountRequest {string productName = 1;
}message CouponModel {int32 id = 1;string productName = 2;string description = 3;int32 amount = 4;
}message CreateDiscountRequest {CouponModel coupon = 1;
}message UpdateDiscountRequest {CouponModel coupon = 1;
}message DeleteDiscountRequest {string productName = 1;
}message DeleteDiscountResponse {bool success = 1;
}

2. 設置grpc server

  • 設置grpc服務
    在這里插入圖片描述
  • 設置成功后,可以在模塊的包管理器看到

在這里插入圖片描述

3. program配置服務

在這里插入圖片描述

4. docker-compose

在這里插入圖片描述

2.2 CRUD

在這里插入圖片描述

1. 查詢

在這里插入圖片描述

2.3 測試

1. 發起查詢請求

在這里插入圖片描述

三、grpc服務消費

土167

  • Basket.Api 服務調用Discount.Grpc服務

3.1 創建client

  • Basket服務要去調用Discount服務,所以Basket是 Client, Discount是 service

1. 添加服務

在這里插入圖片描述

2. 選擇需要添加的服務類型

在這里插入圖片描述

3. 選擇服務路徑

在這里插入圖片描述

4. 添加成功后

  • 添加成功后,basket模塊會有Protos文件夾
    在這里插入圖片描述

5. Program里添加Client服務

  • 在Basket模塊的Program里添加
    在這里插入圖片描述

6. appSettings里添加grpc服務地址

  • 添加Grpc的服務地址
    在這里插入圖片描述

3.2 grpc通訊

1. 在StoreBasketCommandHandler使用

  • 在StoreBasketCommandHandler里進行折扣服務的扣減
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BLIP、InternVL Series(下)

目錄 一、InternVL1.5 1、改進 二、InternVL2 1、漸進式擴展 2、多模態擴展 三、InternVL2.5 1、方法 2、數據優化 四、InternVL3 2、方法 3、訓練后處理 4、測試時擴展 五、BLIP-3o 一、InternVL1.5 1、改進 InternVL1.5在InternVL基礎上&#xff0c;優化了QLLa…

【數據結構】二維差分數組

題目鏈接 【模板】二維差分_牛客題霸_牛客網 牛客網 - 找工作神器|筆試題庫|面試經驗|實習招聘內推&#xff0c;求職就業一站解決_牛客網 描述 給定一個 nmnm 的整數矩陣 bb&#xff0c;矩陣的下標從 11 開始記作 bi,jbi,j?。現在需要支持 qq 次操作&#xff0c;第 tt 次…

【JDK內置工具】常用工具和實戰指令

作者&#xff1a;唐叔在學習 專欄&#xff1a;唐叔的Java實踐 關鍵詞: #JDK工具 #Java性能調優 #JVM調優 #內存泄漏排查 #線程死鎖分析 #Java開發工具 #線上問題排查 #Java診斷工具 Hello&#xff0c;大家好&#xff0c;我是愛學習的唐叔。作為Java開發者&#xff0c;JDK內置工…

一站式PDF轉Markdown解決方案PDF3MD

簡介 什么是 PDF3MD &#xff1f; PDF3MD 是一個現代化、用戶友好的網絡應用程序&#xff0c;旨在將 PDF 文檔轉換為干凈、格式化的 Markdown 文本。它提供了高效的轉換工具&#xff0c;支持多種文件格式之間的轉換。 主要特點 PDF 轉 Markdown&#xff1a;能夠將 PDF 文檔轉…

RocketMQ學習系列之——MQ入門概念

一、什么是MQMQ&#xff08;Message Queue&#xff0c;消息隊列&#xff09;是一種能夠實現跨進程消息傳輸&#xff0c;并且消息緩存符合隊列特性的組件。二、MQ的作用異步&#xff1a;消息發送方無需等待消息接收方收到消息&#xff0c;發送方將消息成功發送到 MQ 之后即可無阻…

血條識別功能實現及原理

從零開始學Python圖像處理 - 血條識別 從實際問題中能快速的學習特定技能&#xff0c;通過完成一個能自動刷怪的工具&#xff0c;達成快速學習python圖像處理和識別。 自動刷怪需要先識別怪物&#xff0c;在游戲中怪物類型很多&#xff0c;同時在移動中形態會一直發生變化&…

網絡地址和主機地址之間進行轉換的類

#pragma once #include "Common.hpp" // 網絡地址和主機地址之間進行轉換的類class InetAddr { public:InetAddr(){}InetAddr(struct sockaddr_in &addr) : _addr(addr){// 網絡轉主機_port ntohs(_addr.sin_port); // 從網絡中拿到的&#xff01;網絡序列// _i…

《Python 項目 CI/CD 實戰指南:從零構建自動化部署流水線》

??《Python 項目 CI/CD 實戰指南:從零構建自動化部署流水線》 一、引言:為什么 Python 項目需要 CI/CD? 在現代軟件開發中,CI/CD(持續集成 / 持續部署)已成為不可或缺的工程實踐。它不僅提升了開發效率,還顯著降低了部署風險。對于 Python 項目而言,CI/CD 的價值尤…

AJAX 技術

AJAX全稱是 Asynchronous JavaScript and XML ( 異步的JavaScript 和 XML )&#xff0c;使用該技術后&#xff0c;可以實現不刷新整個網頁&#xff0c;與服務器進行異步通信并更新部分網頁。一&#xff09;為什么需要AJAX?傳統網頁在與服務器通信時&#xff0c;需要刷新整個頁…

Python爬蟲實戰:研究NLTK庫相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網的快速發展,網絡新聞已成為人們獲取信息的主要來源之一。每天產生的海量新聞文本蘊含著豐富的信息和知識,但也給信息獲取和分析帶來了挑戰。如何從大量非結構化的新聞文本中自動提取有價值的信息,識別熱點話題和趨勢,成為當前自然語…

ARM 學習筆記(二)

參考文獻&#xff1a;《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition》1、MMU 1.1 背景早期的內存是比較小的&#xff0c;一般是幾十k&#xff0c;不過相應的程序也是比較小的&#xff0c;這時程序可以直接加載到內存中運行。后來為了支持多個程序的并行&…

Github 貪吃蛇 主頁設置

自動化腳本頂部元信息觸發條件&#xff08;on:&#xff09;作業&#xff08;jobs:&#xff09;步驟&#xff08;steps:&#xff09;1. 生成 SVG2. 推送到 output 分支Commit & Push在 README 里引用參考&#xff1a;https://github.com/Platane/Platane/tree/master 首先寫…

關于Spring RestTemplate

? 一、概述RestTemplate 是 Spring Framework 提供的一個同步 HTTP 客戶端工具&#xff0c;用于簡化與 RESTful API 的交互。它封裝了底層 HTTP 通信細節&#xff0c;提供了統一的 API 來發送各種 HTTP 請求&#xff08;GET、POST、PUT、DELETE 等&#xff09;&#xff0c;并自…

異步解決一切問題 |消息隊列 |減少嵌套 |hadoop |rabbitmq |postsql

設計準則“為什么要考慮這個問題”The forward logic is only about 10% of your code, everything else is 90%.主流邏輯 10%保障擴容和穩健的代碼設計90%同步代碼就是綁在一個繩上的螞蚱異步就是實現了解耦這個異步或許有點類似于--一些分布式數據的處理 設計如何實現的呢?…

Spring AI 項目實戰(十八):Spring Boot + AI + Vue3 + OSS + DashScope 實現高效語音識別系統(附完整源碼)

系列文章 序號 文章名稱 1 Spring AI 項目實戰(一):Spring AI 核心模塊入門 2 Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼) 3 Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼) 4

指針數組和數組指針的應用案例

1. 指針數組應用&#xff1a;查找最長字符串用指針數組存儲若干字符串&#xff0c;編寫函數找出其中最長的字符串&#xff08;若有多個&#xff0c;返回第一個&#xff09;。#include <stdio.h> #include <string.h>// 函數原型&#xff1a;找出最長字符串 const c…

MCU進入低功耗模式前的引腳處理原則和方法 --> 以最小化低功耗電流

在MCU進入低功耗模式(如Sleep, Stop, Standby, Deep Sleep等)前,精心處理每一個GPIO引腳的狀態是最大限度降低功耗電流的關鍵一步。懸空或配置不當的引腳是導致“漏電”的常見原因。以下是處理引腳以達到最小低功耗電流的原則和方法: ?? 核心原則 避免浮空輸入: 浮空(…

張 關于大語言模型(LLM)置信度研究的經典與前沿論文 :溫度縮放;語義熵;自一致性;事實與反思;檢索增強;黑盒引導;

關于大語言模型(LLM)置信度研究的經典與前沿論文 :溫度縮放;語義熵;自一致性;事實與反思;檢索增強;黑盒引導; 目錄 關于大語言模型(LLM)置信度研究的經典與前沿論文 :溫度縮放;語義熵;自一致性;事實與反思;檢索增強;黑盒引導; 一、校準方法:讓模型概率更貼近真實正確…

ICT測試原理之--什么是假短

ICT測試原理之–什么是假短 文章目錄ICT測試原理之--什么是假短一、假短的由來防止假短二、無法檢測的短路示例解決無法檢測的短路調試短路文件調試意外斷路調試意外短路三、調試假短報告短路和斷路報告假短報告短路設備/引腳功能性短路測試功能性短路測試的語法一、假短的由來…

三種深度學習模型(LSTM、CNN-LSTM、貝葉斯優化的CNN-LSTM/BO-CNN-LSTM)對北半球光伏數據進行時間序列預測

代碼功能 該代碼實現了一個光伏發電量預測系統&#xff0c;采用三種深度學習模型&#xff08;LSTM、CNN-LSTM、貝葉斯優化的CNN-LSTM&#xff09;對北半球光伏數據進行時間序列預測&#xff0c;并通過多維度評估指標和可視化對比模型性能。 算法步驟 1. 數據預處理 數據導入&am…