littlebot
Published on 2025-04-07 / 0 Visits
0

【源码】基于Go语言和Dapr框架的微服务演示项目

项目简介

本项目是基于Go语言和Dapr框架的微服务演示项目。采用envoy作为API网关,包含gRPC服务器、HTTP服务器等多种类型的服务。项目专注于业务实现,借助Dapr实现服务发现、认证、调用重试、限流、状态管理、消息系统和可观测性等功能。

项目的主要特性和功能

  1. 多类型服务支持:涵盖gRPC服务器与HTTP服务器,适应不同场景需求。
  2. 服务治理:通过Dapr达成服务发现、服务mtls认证、服务调用重试、限流和服务访问策略。
  3. 数据管理:支持状态管理和消息系统。
  4. 可观测性:集成zipkin实现服务的可观测性。
  5. 权限控制:借助IAM服务实现权限控制,仅允许特定Bearer Token的请求。

安装使用步骤

安装开发环境

  • 安装Go语言。
  • 使用brew install protobuf安装Protobuf。
  • 使用brew install envoy安装Envoy。
  • 安装相关的Protobuf生成工具:
  • go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
  • go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

安装Kubernetes和Dapr运行时

  1. 准备具有StorageClass的Kubernetes集群。
  2. 安装Helm:wget https://get.helm.sh/helm-v3.10.1-linux-amd64.tar.gz
  3. 安装Dapr运行时:dapr init -k --enable-ha=true
  4. 安装Zipkin:
  5. kubectl create deployment zipkin --image openzipkin/zipkin
  6. kubectl expose deployment zipkin --type ClusterIP --port 9411

安装OpenEBS(可选)

  1. helm repo update
  2. mkdir -pv /data
  3. helm install openebs openebs/openebs -n openebs --create-namespace --set localprovisioner.basePath=/data
  4. kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

安装Redis

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm repo update
  3. helm install redis bitnami/redis --set image.tag=6.2

部署项目

  1. kubectl create cm gateway-config --from-file=envoy.yaml=deploy/envoy.yaml
  2. kubectl create cm gateway-proto --from-file=proto.pb=proto/proto.pb
  3. kubectl apply -f deploy/

测试项目

所有请求若无有效的Bearer Token hanamichispike 将会被拒绝。 - 无有效Token调用dapr HTTP echo 处理程序: ``` Request: curl -X POST \ '192.168.234.3:31484/s/echo' \ --header 'Accept: /' \ --header 'Authorization: Bearer spike2' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "value2" }'

Respond: http status: 401 body: PERMISSION_DENIED - 有有效Token调用dapr HTTP `echo` 处理程序: Request: curl -X POST \ '192.168.234.3:31484/s/echo' \ --header 'Accept: /' \ --header 'Authorization: Bearer spike' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "value2" }'

Respond: http status: 200 body: { "name": "value2" } ```

参考文档

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】