surging-框架学习,简单搭建开发Demo(一)

时间:2019-08-19
本文章向大家介绍surging-框架学习,简单搭建开发Demo(一),主要包括surging-框架学习,简单搭建开发Demo(一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

surging源码地址  https://github.com/dotnetcore/surging

一、surging 网关启动

下载surging源码后,可以直接启动surging网关项目,也可以发布后使用。需要注意的是,需要启动consul、redis

gatewaySettings.json 网关配置文件

二、服务项目搭建

项目目录

using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Text;

namespace ZC.Sys.Entitys.Request
{
    /// <summary>
    /// 登录请求对象
    /// </summary>
    [ProtoContract]
    public class AuthenticationRequestData
    {
        /// <summary>
        /// 用户名
        /// </summary>
        [ProtoMember(1)]
        public string UserName { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        [ProtoMember(2)]
        public string Pwd { get; set; }
    }
}

业务接口层

using Surging.Core.CPlatform.Filters.Implementation;
using Surging.Core.CPlatform.Ioc;
using Surging.Core.CPlatform.Runtime.Server.Implementation.ServiceDiscovery.Attributes;
using System;
using System.Threading.Tasks;
using ZC.Sys.Entitys.Request;
using ZC.Sys.Entitys.VM;

namespace ZC.Sys.IService
{
    /// <summary>
    /// 用户业务接口
    /// </summary>
    [ServiceBundle("api/{Service}")]
    public interface IUserService:IServiceKey
    {
        /// <summary>
        /// 用戶授权
        /// </summary>
        /// <param name="requestData">请求参数</param>
        /// <returns>用户模型</returns>
        Task<VMUserInfo> Authentication(AuthenticationRequestData requestData);

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [Authorization(AuthType = AuthorizationType.JWT)]
        Task<string> GetName();
        
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<int> GetAge();
    }
}
[Authorization(AuthType = AuthorizationType.JWT)]
标记了方法需要进行Token验证,不通过网关调用,不会进行Token验证,也就是说直接请求服务地址不验证Token

业务层代码

using Surging.Core.CPlatform.Ioc;
using Surging.Core.CPlatform.Transport.Implementation;
using Surging.Core.ProxyGenerator;
using System;
using System.Threading.Tasks;
using ZC.Sys.Entitys;
using ZC.Sys.Entitys.Request;
using ZC.Sys.Entitys.VM;
using ZC.Sys.IService;

namespace ZC.Sys.Service
{
    /// <summary>
    /// 用户相关业务
    /// </summary>
    [ModuleName("User")]
    public class UserService : ProxyServiceBase, IUserService
    {
        public async Task<VMUserInfo> Authentication(AuthenticationRequestData requestData)
        {
            VMUserInfo info = new VMUserInfo();

            info.UserId = "1";
            info.UserName = requestData.UserName;
            info.RealName = "测试";

            return await Task.FromResult(info);
        }

        public async Task<int> GetAge()
        {
            return await Task.FromResult(33);
        }

        public async Task<string> GetName()
        {
            var obj = RpcContext.GetContext().GetAttachment("payload");
       
            return await Task.FromResult("测试");
        }




    }
}

ModuleName指定接口ServiceKey

RpcContext.GetContext().GetAttachment("payload")
获取的数据为Token用的基本数据,获取Token数据也可以继承RequestData
using ProtoBuf;
using Surging.Core.CPlatform;
using System;
using System.Collections.Generic;
using System.Text;

namespace ZC.Sys.Entitys.Request
{
    [ProtoContract]
    public class IdentityUser : RequestData
    {
        [ProtoMember(1)]
        public string RoleId { get; set; }
    }
}
IdentityUser作为接口参数使用

ZC.Sys.RunService 服务启动

以上参考源码项目即可

服务启动后可以在consul中找到注册的服务

使用Swagger  开发者写的文章中有提到如何配置

业务层接口

通过网关地址调用授权

729端口号为网关地址端口

http://127.0.0.1:729/api/oauth2/token 授权地址指向 api/user/authentication (user业务层)

 携带token请求网关地址  Token前不要添加Bearer

不通过网关请求接口

 NuGet引用的都为surging的1.0版本


仅为个人学习留存
参考地址:
https://github.com/dotnetcore/surging surging开源地址
https://www.cnblogs.com/fanliang11/ surging作者博客
https://github.com/billyang/SurgingDemo

本文demo https://github.com/zx972243884/surgingsmaple

原文地址:https://www.cnblogs.com/zxcnn/p/11378413.html