dotnet core微服务框架Jimu ~部署和调用演示

首先运行 consul

下载 consul

以开发模式运行

复制代码
consul agent -dev

2. 调试

  1. 用 Visual Studio 2022 IDE 打开项目;
  2. 右击解决方案-选择"属性"
  3. 在属性界面下,选择多项目启动, News.Server, Auth.Server, Register.Server, ApiGateway 几个项目的操作方式选择为"启动";

如下图

3. 部署

  1. 用 Visual Studio 2022 IDE 打开项目;
  2. 右击 News.Server 项目,选择"发布"(Auth.Server,Register.Server,ApiGateway 同理)
  3. 选择发布的文件夹;
  4. 用命令提示符进入文件夹,启动项目
复制代码
dotnet News.Server.dll

如下图

apigateway & server

service service detial

4. postman 调用

调用方不需要知道微服务部署的地址,直接访问网关就可以了。

打开网关的服务列表可以看到所有服务的调用路径,在展开服务的明细可看到更多关于该服务的信息,如授权、角色限制等。

直接复制上面所示的调用地址,下面用 postman 对 api 进行调用:

4.1 Register

4.1.1 判断用户名 grissom 是否可用

  1. 使用 GET 方法请求;
  2. Content-Type 设置为 application/json;

4.1.2 注册会员 grissom

请求路径: http://localhost:5000/api/v1/register/register?name=grissom&nickname=Gil&pwd=123

4.2 Auth

4.2.1 获取 token

上面注册会员都是匿名访问的,但访问受保护的 api 必须先获取 token 请求 token api 需要:

  1. 使用 Post 方法请求;
  2. Content-Type 设置为 application/json;
  3. Body 用 json 格式, 如 {"username":"grissom","password":"123"};

返回结果是一个 json 格式的对象, access_token 就是生成的 token, expired_in (数字时间戳从 1970 到现在的秒数)是 token 的失效时间

复制代码
{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ", "expired_in": 1532365375 } 

4.2.2 获取当前会员信息

  1. 使用 GET 方法请求;
  2. Content-Type 设置为 application/json;
  3. Authorization 设置为上面生成的 token, 格式: Bearer {token} 如
复制代码
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ
  1. 请求路径: http://localhost:5000/api/v1/member/getcurrentmemberinfo

4.3 News

会员服务: 获取所有新闻、获取指定新闻、发布新闻 都是受保护的 api (EnableAuthorization:true),所以调用时都需要带上 token

4.3.1 获取所有新闻

  1. 使用 GET 方法请求;
  2. Content-Type 设置为 application/json;
  3. Authorization 设置为上面生成的 token, 格式: Bearer {token}
  4. 调用路径: api/v1/news/getallnews

4.3.2 发布新闻

发布新闻的接口接受的是一个对象,所以需要用 POST

  1. 使用 POST 方法请求;
  2. Content-Type 设置为 application/json;
  3. Authorization 设置为上面生成的 token, 格式: Bearer {token}
  4. 调用路径: api/v1/news/postnews

根据返回的 id 获取该篇新闻

4.3.3 角色限制

我们看看发布新闻方法的声明

指定了 Roles="admin", 即需要具有 admin 角色的用户才能访问, 而上面调用发布新闻的用户是 grissom , 在模拟数据里配置了他属于 admin 角色

而用户 Foo 的角色是 guest, 我们换成他去获取 token, 然后再调用发布新闻的 api, 会报错: 未授权

相关推荐
青衫客368 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
虫师c13 小时前
分布式系统设计模式:从理论到实践
微服务·设计模式·系统架构·高可用·分布式系统
K_i13421 小时前
Docker、容器、虚拟机到底是什么
docker·微服务·云原生·容器·kubernetes
new_daimond1 天前
微服务网关技术详细介绍
微服务·云原生·架构
Light601 天前
领码方案|微服务与SOA的世纪对话(4):迁移与避坑——从 SOA 到微服务的演进路线图
微服务·云原生·架构·自动化运维·容器化·服务治理·渐进式迁移
虫师c1 天前
分布式系统实战:电商平台架构演进
微服务·架构·高并发·架构演进·分布式系统·电商架构
岁岁岁平安1 天前
分布式系统相关概念(单体、集群、分布式、分布式集群、微服务)
分布式·微服务
眠りたいです2 天前
基于脚手架微服务的视频点播系统-脚手架开发部分-brpc中间件介绍与使用及二次封装
c++·微服务·中间件·rpc·架构·brpc
眠りたいです2 天前
基于脚手架微服务的视频点播系统-脚手架开发部分-jsoncpp,protobuf,Cpp-httplib与WebSocketpp中间件介绍与使用
c++·websocket·微服务·中间件·json·protobuf·cpp-httplib
唐僧洗头爱飘柔95272 天前
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
java·spring·spring cloud·微服务·架构·resttemplate·java微服务技术栈