首页 > 其他分享 >dotnet core微服务框架Jimu ~ 浏览和发布新闻微服务

dotnet core微服务框架Jimu ~ 浏览和发布新闻微服务

时间:2024-11-13 20:08:19浏览次数:1  
标签:core using Jimu System News dotnet news public

提供新闻浏览和发布服务

有 3 个需要授权公开的 api:

  1. GetAllNews 获取所有新闻
  2. PostNews 发布新闻, 具有 admin 角色的会员才能发布新闻
  3. GetNews 根据 id 获取指定的新闻

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

1.1 添加 jimu 引用

Install-Package  Jimu

1.2 创建 dto 类

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

namespace News.IServices
{
    public class News
    {
        public string Id { get; set; }
        public string Title { get; set; }
        public string Director { get; set; }
        public string PostTime { get; set; }
        public string Content { get; set; }

    }
}

1.3 声明公开的微服务接口

微服务的定义规则:

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

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

下面 3 个方法,都设置 EnableAuthorization = true, 需要授权才能访问(即请求要带上 token),其中 PostNews 指定 Roles = "admin", 具有 admin 角色的会员才能调用该方法

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Jimu;

namespace News.IServices
{
    [JimuServiceRoute("/api/v1/news")]
    public interface INewsService : IJimuService
    {
        [JimuService(EnableAuthorization = true, CreatedBy = "grissom", CreatedDate = "2018-07-17", Comment = "get all news")]
        Task<List<News>> GetAllNews();

        [JimuService(EnableAuthorization = true, Roles = "admin", CreatedBy = "grissom", CreatedDate = "2018-07-17", Comment = "post news")]
        Task<string> PostNews(News news);

        [JimuService(EnableAuthorization = true, CreatedBy = "grissom", CreatedDate = "2018-07-17", Comment = "get specify news")]
        News GetNews(string id);
    }
}

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

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

2.2 实现接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Jimu;

namespace News.IServices
{
    public class NewsService : INewsService
    {
        readonly ILogger _logger;
        readonly JimuPayload _jimuPayload;
        static List<News> _newsDb = new List<News>();
        static NewsService()
        {
            // mock some  news
            _newsDb.Add(new News { Id = Guid.NewGuid().ToString(), Director = "grissom", PostTime = DateTime.Now.ToString(), Title = "世界杯:法国夺冠啦!", Content = "头条:法国勇夺2018年世界杯冠军, 后面省略 1 万字" });
            _newsDb.Add(new News { Id = Guid.NewGuid().ToString(), Director = "grissom", PostTime = DateTime.Now.ToString(), Title = "Jimu 发布新版本", Content = "新闻社:Jimu(积木) 发布新版本,特点有,后面省略 1 万字" });
        }
        public NewsService(ILogger logger, JimuPayload jimuPayload)
        {
            _logger = logger;
            _jimuPayload = jimuPayload;
        }

        public Task<List<News>> GetAllNews()
        {
            _logger.Debug($"member: {_jimuPayload.Items["username"]} getallnews");
            return Task.FromResult(_newsDb);
        }

        public Task<string> PostNews(News news)
        {
            _logger.Debug($"member: {_jimuPayload.Items["username"]} post an news which title is: {news.Title}");

            news.PostTime = DateTime.Now.ToString();
            news.Id = new Guid().ToString();
            news.Director = _jimuPayload.Items["username"].ToString();
            _newsDb.Add(news);
            return Task.FromResult(news.Id);

        }

        public News GetNews(string id)
        {
            _logger.Debug($"member: {_jimuPayload.Items["username"]} getnews by id: {id}");
            var news = _newsDb.FirstOrDefault(x => x.Id == id);
            return news;
        }
    }
}

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

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

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

Install-Package  Jimu.Server
Install-Package  Jimu.Common.Discovery.ConsulIntegration

3.3 启动 jimu 服务代码

using System;
using Autofac;
using Jimu.Server;

namespace News.Server
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ServiceHostServerBuilder(new ContainerBuilder())
             .UseLog4netLogger()
             .LoadServices("News.IServices", "News.Services")
             .UseDotNettyForTransfer("127.0.0.1", 8002)
             .UseConsulForDiscovery("127.0.0.1", 8500, "JimuService", $"127.0.0.1:8002")
             .UseJoseJwtForOAuth<Jimu.DotNettyAddress>(new Jimu.Server.OAuth.JwtAuthorizationOptions
             {
                 SecretKey = "123456",
             });
            using (var host = builder.Build())
            {
                host.Run();
                while (true)
                {
                    Console.ReadKey();
                }
            }
        }
    }
}

 

标签:core,using,Jimu,System,News,dotnet,news,public
From: https://www.cnblogs.com/flamesky/p/18544698

相关文章

  • .NET Core 泛型底层原理浅谈
    .NETCore泛型底层原理浅谈 简介泛型参考资料烂大街,基本资料不再赘述,比如泛型接口/委托/方法的使用,逆变与协变。泛型好处有如下几点代码重用算法重用,只需要预先定义好算法,排序,搜索,交换,比较等。任何类型都可以用同一套逻辑类型安全编译器保证不会将int传给string简单清......
  • 推荐一个.NetCore开源的CMS项目,功能强大、扩展性强、支持插件的系统!
    推荐一个基于.NetCore开发的开源CMS项目,该项目功能完善、涉及知识点比较多,不管是作为二次开发、还是学习都是不错的选择。01项目简介Cofoundry是基于.Net开发的、代码优先开发、具备可扩展且灵活的架构、简单易用的内容管理系统。02项目框架1、基于.Net8开发。2、数据......
  • spring boot core
     1.最快的例子 Coach接口packagecom.example18.example_18;publicinterfaceCoach{StringgetDailyWorkout();}CricletCoach类对接口的实现packagecom.example18.example_18;importorg.springframework.stereotype.Component;@Componentpubliccla......
  • .NET Core 委托底层原理浅谈
    简介.NET通过委托来提供回调函数机制,与C/C++不同的是,委托确保回调是类型安全,且允许多播委托。并支持调用静态/实例方法。简单来说,C++的函数指针有如下功能限制,委托作为C#中的上位替代,能弥补函数指针的不足。类型不安全函数指针可以指向一个方法定义完全不同的函数。在编译期......
  • C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。每......
  • springboot 接入shardingsphere-jdbc-core-spring-boot-starter
    环境springboot+mybatis-plus+driud注:druid引入方式请不要使用boot-starter方式<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>......
  • 《ASP.Net Core技术内幕与项目实战》读书笔记_1
    ch1.NETCore入门.NET介绍这一章主要说的是.NetCore、.NetFramework、.NetStanard三个之间的关系。通俗来讲就是Core是新出的、能跨平台,Framwork是老版的、不能跨平台,Standard是为了在Framework、Core、Xamarin中统一库的使用而定制的规范,以便于开发出来的库可以在多个平......
  • 使用 .NET Core 7 和 SignalR 构建实时聊天应用程序
    动动你可爱的小手,请关注下本人公众号,继续为您提供更多原创技术文章。谢谢给为的支持SignalR 是一个ASP.NET库,它支持实时Web功能,允许服务器立即将更新推送到客户端,从而提高应用程序的效率和响应能力。它通过简化通信和支持各种传输协议,对于聊天应用程序、实时仪表板和协......
  • C小题目:有一个一维数组score,放10个学生的成绩,求平均成绩。
    #include<stdio.h>intaverage(intx[],intlen){inti,sum=0;for(i=0;i<len;i++){sum+=x[i];printf("%d\n",x[i]);};inta=sum/len;printf("theaverageis%d\n",a);};intmain(){......
  • C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等......