(二)微服務(grpc/grpc消費者)


文章目錄

  • 項目地址
  • 一、grpc介紹
    • 1.1 項目初始化
      • 1. 創建grpc項目
      • 2. 項目結構
  • 二、Discount grpc創建
    • 2.1 實體層
      • 1. Coupon實體
    • 2.2 Protos
      • 1. 創建discount.proto
      • 2. 配置proto
      • 3. 創建DiscountService
      • 4. Program里注冊服務
    • 2.3 Seed 數據
      • 1. 創建表和Seed數據
      • 2. 自動migration
    • 2.4 更新Docker
      • 1. 更新Docker file
      • 2. 更新Docker compose
  • 三、消費者
    • 3.1 使用grpc消息
      • 1. 創建grpc的引用
      • 2. 使用grpc消息
      • 3. grpc服務注冊
    • 3.2 構建docker
      • 1. 重新構建docker file
      • 2. docker compose


項目地址

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

一、grpc介紹

1.1 項目初始化

1. 創建grpc項目

在這里插入圖片描述

2. 項目結構

在這里插入圖片描述

  • Protos:用來存放協議文件.proto,協議有三部分組成 1. service 2.rpc 3.message

二、Discount grpc創建

2.1 實體層

在這里插入圖片描述

1. Coupon實體

namespace Discount.Grpc.Models;
public class Coupon
{public int Id { get; set; }public string ProductName { get; set; } = default!;public string Description { get; set; } = default!;public int Amount { get; set; }
}

2.2 Protos

在這里插入圖片描述

1. 創建discount.proto

  • 創建discount的proto,相當于接口
syntax = "proto3"; //類型
option csharp_namespace = "Discount.Grpc";
package discount; //自定義包名//服務定義
service DiscountProtoService {// Discount CRUD Operationsrpc GetDiscount (GetDiscountRequest) returns (CouponModel); //傳入GetDiscountRequest返回CouponModelrpc CreateDiscount (CreateDiscountRequest) returns (CouponModel); //傳入CreateDiscountRequest返回rpc UpdateDiscount (UpdateDiscountRequest) returns (CouponModel); //傳入UpdateDiscountRequestrpc DeleteDiscount (DeleteDiscountRequest) returns (DeleteDiscountResponse); //傳入DeleteDiscountRequest
}//GetDiscountRequest消息
message GetDiscountRequest {string productName = 1;
}
//定義CouponModel
message CouponModel {int32 id = 1;string productName = 2;string description = 3;int32 amount = 4;
}
//Create需要傳入完整的CouponModel
message CreateDiscountRequest {CouponModel coupon = 1;
}
// UpdateDiscountRequest需要傳入完整的CouponModel
message UpdateDiscountRequest {CouponModel coupon = 1;
}
// DeleteDiscountRequest只需要傳入productName
message DeleteDiscountRequest {string productName = 1;
}
// DeleteDiscountResponse只需要返回一個bool值
message DeleteDiscountResponse {bool success = 1;
}

2. 配置proto

在這里插入圖片描述

  • 配置成功,項目的配置中可以到
  <ItemGroup><Protobuf Include="Protos\discount.proto" GrpcServices="Server" /></ItemGroup>

3. 創建DiscountService

  • DiscountService.cs:實現Proto的,使用Mapster
namespace Discount.Grpc.Services;public class DiscountService(DiscountContext dbContext, ILogger<DiscountService> logger): DiscountProtoService.DiscountProtoServiceBase
{    public override async Task<CouponModel> GetDiscount(GetDiscountRequest request, ServerCallContext context){//使用EF Core從數據庫中獲取折扣信息var coupon = await dbContext.Coupons.FirstOrDefaultAsync(x => x.ProductName == request.ProductName);if (coupon is null)coupon = new Coupon { ProductName 

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

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

相關文章

InfluxQL 數據分析實戰:聚合、過濾與關聯查詢全解析

InfluxQL 作為時序數據庫的專用查詢語言&#xff0c;在處理時間序列數據時展現出獨特優勢。本文深入探討 聚合計算、數據過濾和跨測量關聯 三大核心操作&#xff0c;通過真實代碼示例展示如何從海量時序數據中提取關鍵洞察。文中涵蓋從基礎平均值計算到復雜多維度分析的完整流程…

TDengine 運維——巡檢工具(安裝前檢查)

簡介 本文檔旨在介紹 TDengine 安裝部署前后配套的巡檢工具。 相關工具的功能簡介&#xff1a; 工具名稱功能簡介安裝前檢查部署前對 TDengine 安裝部署的依賴要素進行安裝前檢查安裝前預配置部署前對 TDengine 安裝部署的依賴要素進行安裝前預配置安裝部署指定環境安裝部署…

大語言模型(LLM)入門 - (1) 相關概念

文章來自&#xff1a;大語言模型(LLM)小白入門自學項目-TiaoYu-1 GitHub - tiaoyu1122/TiaoYu-1: For People! For Freedom!For People! For Freedom! Contribute to tiaoyu1122/TiaoYu-1 development by creating an account on GitHub.https://github.com/tiaoyu1122/TiaoYu…

LearnOpenGL-筆記-其十一

Normal Mapping 又到了介紹法線貼圖的地方&#xff0c;我感覺我已經寫了很多遍了... 法線貼圖用最簡單的話來介紹的話&#xff0c;就是通過修改貼圖對應物體表面的法線來修改光照效果&#xff0c;從而在不修改物體實際幾何形狀的前提下實現不同于物體幾何形狀的視覺效果。 因…

Spring Boot 讀取.env文件獲取配置

Spring Boot 讀取.env文件獲取配置 在Resouce 目錄下創建.env文件 # DEEP SEEK TOKEN DEEP_SEEK_TOKENyour_deep_seek_key # 阿里云百煉 TOKEN ALI_BAILIAN_TOKENyour_ali_bailian_keyyml引入.env文件 spring:config:import: optional:classpath:.env[.properties]使用.env文…

【C++高級主題】命令空間(三):未命名的命名空間

目錄 一、未命名的命名空間的基本概念 1.1 定義與特點 1.2 基本語法 1.3 訪問方式 1.4 未命名的命名空間的作用 二、未命名的命名空間與靜態聲明的比較 2.1 靜態聲明的作用 2.2 未命名的命名空間的優勢 2.3 示例代碼比較 2.4. 未命名的命名空間的作用域和鏈接屬性 三…

【Unity】AudioSource超過MaxDistance還是能聽見

unity版本&#xff1a;2022.3.51f1c1 將SpatialBlend拉到1即可 或者這里改到0 Hearing audio outside max distance - #11 by wderstine - Questions & Answers - Unity Discussions

多個vue2工程共享node_modules

手頭有多個vue2項目&#xff0c;它們每個都需要一個node_modules&#xff0c;拷貝起來超級麻煩。于是想到能否共享一個node_modules呢&#xff1f;&#xff1f; 方法其實挺多&#xff0c;我選擇了一個較簡單的&#xff1a;符號連接法(win11平臺) 創建方法很簡單&#xff1a;比…

C語言-10.字符串

10.1字符串 10.1-1字符串 字符數組 char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; word[0]Hword[1]eword[2]lword[3]lword[4]oword[5]!這不是C語言的字符串,因為不能用字符串的方式做計算 字符串 char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; word[0]Hwo…

Python訓練營打卡Day41(2025.5.31)

知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch歸一化層…

樂觀鎖:高效并發無鎖方案

4.樂觀鎖 這一章主要介紹樂觀鎖。前面的管程部分講了悲觀鎖&#xff0c;現在做一些總結&#xff1a; 悲觀鎖&#xff08;Pessimistic Lock&#xff09;&#xff1a;悲觀鎖認為數據在多線程或多進程環境下總是容易發生沖突/沖突的概率高&#xff0c;所以在數據操作前&#xff…

山海鯨輕 3D 渲染技術深度解析:預渲染如何突破多終端性能瓶頸

在前期課程中&#xff0c;我們已系統講解了山海鯨兩大核心渲染模式——云渲染與端渲染的技術特性及配置方法。為滿足復雜場景下的差異化需求&#xff0c;山海鯨創新推出輕3D渲染功能&#xff0c;本文將深度解析該技術的實現原理與操作實踐。 一、輕3D功能研發背景 針對多終端協…

【合集】Linux——31個普通信號

Linux普通信號總表&#xff08;1-31&#xff09;?? ?編號??信號名??觸發原因??默認動作?1SIGHUP終端連接斷開&#xff08;如SSH會話終止&#xff09;或守護進程重載配置&#xff08;如nginx -s reload&#xff09;終止進程2SIGINT用戶輸入CtrlC中斷前臺進程終止進程…

小程序使用npm包的方法

有用的鏈接 npm init -y 這個命令很重要, 會初始化 package.json 再重新打開微信小程序開發工具 選擇工具中npm構建 在程序中引用時在main.js中直接使用包名的方式引用即可 如安裝的是generator包&#xff0c;npm構建后就會生成 const myPackage require(***-generato…

騰訊云推出云開發AI Toolkit,國內首個面向智能編程的后端服務

5月28日&#xff0c;騰訊云開發 CloudBase 宣布推出 AI Toolkit&#xff08;CloudBase AI Toolkit&#xff09;&#xff0c;這是國內首個面向智能編程的后端服務&#xff0c;適配 Cursor 等主流 AI 編程工具。 云開發 AI Toolkit旨在解決 AI 輔助編程的“最后一公里”問題&…

系統是win11+兩個ubuntu,ubuntu20.04和ubuntu22.04,想刪除ubuntu20.04且不用保留數據

在 Ubuntu 22.04 的終端里運行這些命令: 重啟電腦&#xff0c;選擇啟動 Ubuntu 22.04&#xff1b;打開終端&#xff1b;從 lsblk 開始操作。 如果你不確定當前啟動的是哪個系統&#xff0c;可以在終端輸入&#xff1a; lsb_release -a它會輸出&#xff1a; Distributor ID: …

大模型應用開發第三講:大模型是Agent的“大腦”,提供通用推理能力(如GPT-4、Claude 3)

大模型應用開發第三講&#xff1a;大模型是Agent的“大腦”&#xff0c;提供通用推理能力&#xff08;如GPT-4、Claude 3&#xff09; 資料取自《大模型應用開發&#xff1a;動手做AI Agent 》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的…

第十四篇:MySQL 運維中的故障場景還原與排查實戰技巧

本篇通過典型故障場景的還原與分析&#xff0c;幫助你掌握高效、系統的 MySQL 故障排查與應急處理方法&#xff0c;構建穩定可靠的數據庫運維體系。 一、故障排查的基本思路 快速定位問題入口&#xff1a; 錯誤日志、連接報錯、監控告警&#xff1b; 確認影響范圍&#xff1a…

MySQL 分頁查詢優化

目錄 前言1. LIMIT offset, count 的性能陷阱&#xff1a;為什么它慢&#xff1f;&#x1f629;2. 優化策略一&#xff1a;基于排序字段的“跳躍式”查詢 (Seek Method) &#x1f680;3. 優化策略二&#xff1a;利用子查詢優化 OFFSET 掃描 (ID Subquery)4. 基礎優化&#xff1…

使用curlconverter網站快速生成requests請求包

在python寫requests請求的時候&#xff0c;抓包后需要復制粘貼包的內容&#xff0c;然后手動修改和寫代碼。 最近發現一個好的網站 https://curlconverter.com/python/ 可以復制curl(bash)數據后&#xff0c;直接生成數據包&#xff0c;非常便捷。 舉例說明&#xff1a; 選…