dotnet core微服务框架Jimu ~ 浏览和发布新闻微服务
提供新闻浏览和发布服务
有 3 个需要授权公开的 api:
- GetAllNews 获取所有新闻
- PostNews 发布新闻, 具有 admin 角色的会员才能发布新闻
- 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 声明公开的微服务接口
微服务的定义规则:
- 必须继承 IJimuService 接口
- 声明路由属性 [JimuServiceRoute()]
- 方法添加属性 [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();
}
}
}
}
}
dotnet core微服务框架Jimu ~ 浏览和发布新闻微服务的更多相关文章
- .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...
- 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...
- Go微服务框架go-kratos实战04:kratos中服务注册和服务发现的使用
一.简介 关于服务注册和服务发现介绍,我前面的文章有介绍过 - 服务注册和发现的文章. 作为服务中心的软件有很多,比如 etcd,consul,nacos,zookeeper 等都可以作为服务中心. ...
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
在上一篇,“一切都是消息”--MSF(消息服务框架)之[请求-响应]模式 ,我们演示了MSF实现简单的请求-响应模式的示例,今天来看看如何实现[发布-订阅]模式.简单来说,该模式的工作过程是: 客户端 ...
- “一切都是消息”--iMSF(即时消息服务框架)之【发布-订阅】模式
MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...
- dotnet core 开发无缝兼容Http和Websocket协议的接口服务
在应用接口开发中往往要针对不同协义开发相应的代理服务,但对于Websocket和http这两种协议来说就有些不同,从实现上来看Websocket可以说是Http的升级子协议, 两者在协议处理上基本一致 ...
- .Net Core 分布式微服务框架介绍 - Jimu
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...
- spring cloud 入门,看一个微服务框架的「五脏六腑」
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」
原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...
随机推荐
- Win32 菜单添加复选标记和单选标记
在菜单中添加复选标记用CheckMenuItem函数 CheckMenuItem函数原型: DWORD WINAPI CheckMenuItem( _In_ HMENU hMenu, //菜单句柄 _ ...
- 运行 Java 程序
Java 程序实际上就是我们编译好的 Java 类文件.运行 Java 程序就是运行 Java 类的 main 函数. 编译并运行 Java 文件 源文件: package com.example; ...
- XeLaTeX 无法编译含有经过 pdfcrop 裁剪的 PDF 文件的文档
今天在写 LaTeX 文档时踩了个大坑,我在文档里插入了一个 PDF 图片之后文档无法编译了. 于是我去掉多余代码,做了一个最小工作示例: \documentclass{article} \usepa ...
- 关于安装李沐深度学习d2l包报错的解决办法(保姆教程)
目录 目录:d2l包安装失败的解决过程 前言 一.李沐提供的安装方式 1. 创建一个新的环境 2. 激活 d2l 环境 3. 安装深度学习框架和d2l软件包 3.1 安装PyTorch的CPU或GPU ...
- dotnet 学习 CPF 框架笔记 了解 X11 里如何获取触摸信息
本文记录我学习 CPF 框架的笔记,本文记录我阅读 CPF 框架,学习到了如何在 dotnet C# 里面获取到 X11 的触摸信息,获取到多指触摸以及触摸点的面积和触摸点压感等信息的方法 开始之前, ...
- 科技助力上亿用户隐私安全保护,合合信息两款产品再获CCIA PIA星级标识
随着互联网技术的飞速发展,个人信息的收集.存储.使用和传输变得日益频繁,其泄露和滥用的风险也随之增加,个人信息保护已成为社会共同关注的热点议题.近期,"中国网络安全产业联盟(CCIA)数据安 ...
- JavaScript——案例-表单验证
需求 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 编写自己的简易版网络协议栈(1)--arp协议,使用wireshark抓包分析
实验环境: 略. 实验背景:已编写好基于以太网接口的输入处理,能够解析到以太网数据包内的帧类型. 1. 协议栈底层采用轮询方式,即轮询以太网数据包. 2. 若收到数据,则交由以太网输入处理模块进行解析 ...
- 【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景
目录 前言 一.常见 key-value 二.时效性强 三.计数器相关 四.高实时性 五.排行榜系列 六.文章小结 前言 在笔者 3 年的 Java 一线开发经历中,尤其是一些移动端.用户量大的互联网 ...
- 【赵渝强老师】大数据分析引擎:Presto
一.什么是Presto? 背景知识:Hive的缺点和Presto的背景 Hive使用MapReduce作为底层计算框架,是专为批处理设计的.但随着数据越来越多,使用Hive进行一个简单的数据查询可能要 ...