dotnet core微服务框架Jimu ~ 会员注册微服务

提供会员注册服务,用户必须注册成会员才能享受应用提供的服务,如浏览和发布新闻, 但有些服务又需要指定角色的会员才能操作,如所有会员都可以浏览新闻,只有管理员(admin)角色的会员才可以发布新闻。

有 2 个公开的 api:

  1. CheckName:判断用户名是否可用;
  2. Register:根据用户名注册会员;

1 声明接口,创建基于 .Net Core 6.0 的类库项目,命名为 Register.IServices

1.1 添加 jimu 引用

复制代码
Install-Package  Jimu

1.2 创建 dto 类

复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace Register.IServices
{
    public class Member
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string NickName { get; set; }
        public string Pwd { get; set; }

    }
}

1.3 声明公开的微服务接口

微服务的定义规则:

  1. 必须继承 IJimuService 接口
  2. 声明路由属性 JimuServiceRoute()
  3. 方法添加属性 JimuService(),该方法才会注册成公开的微服务

Jimu 支持异步方法, 如下面的 Register

下面的两个方法,未设置 EnableAuthorization = true(默认为 false),都可以匿名访问

复制代码
using System;
using System.Threading.Tasks;
using Jimu;

namespace Register.IServices
{
    [JimuServiceRoute("/api/v1/register")]
    public interface IRegisterService : IJimuService
    {
        [JimuService(CreatedBy = "grissom", CreatedDate = "2018-07-17", Comment = "check member name whether is valid")]
        bool CheckName(string name);
        [JimuService(CreatedBy = "grissom", CreatedDate = "2018-07-17", Comment = "register member")]
        Task<bool> Register(string name, string nickname, string pwd);

    }
}

2 实现接口,创建基于 .Net Core 6.0 的类库项目,命名为 Register.Services

2.1 添加对接口项目 Register.IServices 的引用

2.2 实现接口

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Register.IServices;

namespace Register.Services
{
    public class RegisterService : IRegisterService
    {
        static List<Member> _membersDb = new List<Member>();

        public bool CheckName(string name)
        {
            return !_membersDb.Any(x => x.Name == name);
        }

        public Task<bool> Register(string name, string nickname, string pwd)
        {
            if (!CheckName(name))
            {
                return Task.FromResult(false);
            }
            _membersDb.Add(new Member { Id = Guid.NewGuid(), Name = name, NickName = nickname, Pwd = pwd });
            return Task.FromResult(true);

        }
    }
}

3 微服务的宿主服务器,创建基于 .Net Core 6.0 的控制台应用, 命名为 Register.Server

3.1 添加对项目: Register.Services 的引用

3.2 添加 jimu.server 和 Jimu.Common.Discovery.ConsulIntegration 引用

复制代码
Install-Package  Jimu.Server
Install-Package  Jimu.Common.Discovery.ConsulIntegration

3.3 启动 jimu 服务代码

复制代码
using Jimu.Server;
using System;

namespace Register.Server
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ServiceHostServerBuilder(new Autofac.ContainerBuilder())
             .UseLog4netLogger() // 使用 log4net 记录日志
             .LoadServices("Register.IServices", "Register.Services") // 加载服务
             .UseDotNettyForTransfer("127.0.0.1", 8001) // DotNetty 监听 8001 端口进行通讯
             .UseConsulForDiscovery("127.0.0.1", 8500, "JimuService", $"127.0.0.1:8001") // 使用 consul, "JimiService" 指定注册服务时,key 带上的前缀,相当于服务分组,$"127.0.0.1:8001" 指定服务宿主的访问地址
             .UseJoseJwtForOAuth<Jimu.DotNettyAddress>(new Jimu.Server.OAuth.JwtAuthorizationOptions
             {
                 SecretKey = "123456", 
             }); // 使用 jwt 进行鉴权,这里只是验证 token,所以只需验证的密钥, 生产 token 在 Auth.Server 服务
            using (var host = builder.Build())
            {
                host.Run(); // 启动服务
                while (true)
                {
                    Console.ReadKey();
                }
            }
        }
    }
}
相关推荐
fanly113 小时前
Surging AI Agent 完整产品介绍
微服务·microservice
曲幽7 天前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock
蝎子莱莱爱打怪7 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking8 天前
Java微服务练习方式
java·后端·微服务
米丘11 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质13 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质14 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯14 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y14 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰14 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理