1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dotnetchina-anno.core

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

🎁Nuget 扩展

Package name Description Version Downloads
Anno.EventBus EventBus事件总线库 NuGet downloads
Anno.RateLimit 令牌桶、漏桶限流库 NuGet downloads
Anno.EngineData.RateLimit Anno服务限流中间件 NuGet downloads
Anno.LRUCache 缓存库 NuGet downloads
Anno.EngineData.Cache Anno服务缓存中间件 NuGet downloads
Anno.Plugs.MonitorService Anno服务监控中间件 NuGet downloads
Anno.Rpc.Client.DynamicProxy 接口代理 Anno客户端扩展 NuGet downloads

整体架构

整体架构

📦注册中心 (AnnoCenter)

AnnoCenter — это сервис регистрации, который выполняет следующие функции:

  • обнаружение сервисов (например, сервис заказа A, сервис инвентаризации B, сервис оплаты C, сервис пользователя D);
  • хранение конфигурационной информации;
  • проверка работоспособности;
  • балансировка нагрузки;
  • ограничение потока;
  • обработка отказов и повторных попыток;
  • отслеживание маршрутов;
  • мониторинг ресурсов.

Клиенты (например, ApiGateway) отправляют запросы, а клиентская библиотека ищет в локальном кэше список сервисов, способных обработать запрос. Затем выбирается один из них для обработки запроса, и возвращается ответ. В случае неудачи включается механизм повторной попытки.

Центр регистрации периодически проверяет работоспособность каждого сервиса. Если соединение с сервисом не устанавливается, он помечается как «нездоровый». Клиенты не исключаются из обслуживания, но новые сервисы не могут зарегистрироваться. Центр регистрации будет продолжать проверять работоспособность сервиса до тех пор, пока он не восстановит нормальную работу в течение минуты, после чего статус сервиса будет изменён на «здоровый», и он сможет предоставлять услуги клиентам.

Для запуска центра регистрации требуется только настроить порт и время ожидания. Информация о серверах автоматически записывается при регистрации сервисов.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--#lbs 配置 Port 注册中心监听端口 TimeOut 超时时间毫秒
  dc:节点
  dc:nickname:服务名称 App001
  dc:name: 功能tag
  dc:ip:服务IP
  dc:port:服务端口
  dc:timeout:服务超时时间
  dc:weight:服务权重 数字
  -->
  <Port>6660</Port>
  <TimeOut>120000</TimeOut>
  <Servers>
    <dc name="Anno.Plugs.TraceService,Anno.Plugs.DLockService,Anno.Plugs.EsLogService" nickname="App001" ip="10.112.93.122" port="6659" timeout="20000" weight="1" />
  </Servers>
</configuration>

👑Сервисы (AnnoService)

Это хост-программы, основанные на принципе «соглашение важнее конфигурации». Они разработаны с использованием плагина.

Конкретные рекомендации по разработке пакетов:

  • имена пакетов и имена сборок должны совпадать, формат — Anno.Plugs.XXXService (например, Anno.Plugs.HelloWorldService);
  • инициализация конфигурации;
  • реализация интерфейса IPlugsConfigurationBootstrap. Функциональный модуль

Наследование: BaseModule.
Модуль именуется по шаблону XXXModule, где XXX — название модуля, а Module — его окончание (например, HelloWorldViperModule).

/****************************************************** 
Автор: Ду Яньмин
Почта: dym880@163.com
Дата создания: 2020/10/30 13:15:24 
Функциональное описание: HelloWorldViperModule
******************************************************/
using System;
using System.Collections.Generic;
using System.Text;

namespace Anno.Plugs.HelloWorldService
{
    using Anno.Const.Attribute;
    using Anno.EngineData;
    using HelloWorldDto;
    using System.ComponentModel.DataAnnotations;

    public class HelloWorldViperModule : BaseModule
    {
        [AnnoInfo(Desc = "世界你好啊SayHi")]
        public dynamic SayHello([AnnoInfo(Desc = "称呼")] string name, [AnnoInfo(Desc) = "年龄")] int age)
        {
            Dictionary<string, string> input = new Dictionary<string, string>();
            input.Add("vname", name);
            input.Add("vage", age.ToString());
            var soEasyMsg = Newtonsoft.Json.JsonConvert.DeserializeObject<ActionResult<string>>(this.InvokeProcessor("Anno.Plugs.SoEasy", "AnnoSoEasy", "SayHi", input)).OutputData;
            return new { HelloWorldViperMsg = $"{name}你好啊,今年{age}岁了", SoEasyMsg = soEasyMsg };
        }

        [AnnoInfo(Desc = "两个整数相减等于几?我来帮你算(x-y=?)")]
        public int Subtraction([AnnoInfo(Desc = "整数X")] int x, [AnnoInfo(Desc = "整数Y")] int y)
        {
            return x - y;
        }
        [AnnoInfo(Desc = "买个商品吧,双十一马上就来了")]
        public ProductDto BuyProduct([AnnoInfo(Desc = "商品名称")] string productName, [AnnoInfo(Desc = "商品数量")] int number)
        {
            double price = new Random().Next(2, 90);
            Dictionary<string, string> input = new Dictionary<string, string>();
            input.Add("productName", productName);
            input.Add("number", number.ToString());
            var product = Newtonsoft.Json.JsonConvert.DeserializeObject<ActionResult<ProductDto>>(this.InvokeProcessor("Anno.Plugs.SoEasy", "AnnoSoEasy", "BuyProduct", input)).OutputData;
            product.CountryOfOrigin = $"中国北京中转--{ product.CountryOfOrigin}";
            return product;
        }       
    }
}

Конфигурационный файл

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--0,0 第一位是 工作站,第二位数据中心
  (所有的 AnnoService 的 两位数不能重复例如不能存在【1,2】【1,2】)
  可以存在【1,2】【2,1】-->
  <IdWorker>0,0</IdWorker>
  <!--App名称-->
  <AppName>App001</AppName>
  <!--监听端口-->
  <Port>6659</Port>
  <!--权重-->
  <Weight>1</Weight>
  <!--功能--> 
  <FuncName>Anno.Plugs.LogicService,Anno.Plugs.TraceService</FuncName>
  <!--忽略的功能 Trace,Logic-->
  <IgnoreFuncName></IgnoreFuncName>
  <!--超时时间毫秒-->
  <TimeOut>20000</TimeOut>
  <!--注册到的目标-->
  <Ts Ip="10.112.93.122" Port="6660"/>
  <IocDll>
    <!-- IOC 仓储、领域-->
    <Assembly>Anno.Repository</Assembly>
  </IocDll>
  <appSettings>
   
   </appSettings>
</configuration>

Введение

Anno — это микросервисная платформа, на нижнем уровне которой можно выбрать использование gRPC или Thrift. Имеет встроенные функции обнаружения сервисов, отслеживания цепочки вызовов, cron-планирования, ограничения потока, шины событий, CQRS, DDD и разработки с использованием плагинов. Viper — пример проекта и панели управления для Anno. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dotnetchina-anno.core.git
git@api.gitlife.ru:oschina-mirror/dotnetchina-anno.core.git
oschina-mirror
dotnetchina-anno.core
dotnetchina-anno.core
master