🎁Nuget 扩展
整体架构
📦注册中心 (AnnoCenter)
AnnoCenter — это сервис регистрации, который выполняет следующие функции:
Клиенты (например, 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)
Это хост-программы, основанные на принципе «соглашение важнее конфигурации». Они разработаны с использованием плагина.
Конкретные рекомендации по разработке пакетов:
Наследование: 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>
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.