1. 程式人生 > 實用技巧 >檢視JMS微服務線上情況,並自動生成微服務客戶端程式碼

檢視JMS微服務線上情況,並自動生成微服務客戶端程式碼

連結:https://pan.baidu.com/s/1neWdJlZD9-IXcjNP5sfR7w
提取碼:6666
在網盤裡,下載ServiceStatusViewer工具,解壓後,修改appsettings.json檔案裡面的閘道器地址,然後執行ServiceStatusViewer工具,即可顯示閘道器的線上微服務

也可以用命令ServiceStatusViewer.exeappsettings2.json 的方式,指定使用某個配置檔案啟動此工具

如果線上的微服務是Debug模式,可以點選【獲取客戶端程式碼】,直接生成該微服務的客戶端訪問程式碼。

生成的客戶端程式碼大概如下格式:

//------------------------------------------------------------------------------
// <auto-generated> // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ // GetPositionMode 獲取持倉模式
// GetUserAccount 獲取使用者資金資訊 namespace DemoSys.WebApi.MicroServices { using JMS; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; [InvokerInfo("UserAccountService")] public class UserAccountService : IImplInvoker {
protected JMS.IMicroService _microService; public UserAccountService(JMS.IMicroService microService) { this._microService = microService; } /// <summary> /// 獲取持倉模式 /// </summary> /// <param name="userId"></param> /// <returns></returns> public virtual TradeSystem.DBModels.MoneyAccount_PositionTypeEnum GetPositionMode(long userId) { return this._microService.Invoke<TradeSystem.DBModels.MoneyAccount_PositionTypeEnum>("GetPositionMode", userId); } /// <summary> /// 獲取持倉模式 /// </summary> /// <param name="userId"></param> /// <returns></returns> public virtual Task<TradeSystem.DBModels.MoneyAccount_PositionTypeEnum> GetPositionModeAsync(long userId) { return this._microService.InvokeAsync<TradeSystem.DBModels.MoneyAccount_PositionTypeEnum>("GetPositionMode", userId); } /// <summary> /// 獲取使用者資金資訊 /// </summary> /// <param name="userid"></param> /// <param name="coin"></param> /// <returns></returns> public virtual TradeSystem.DBModels.MoneyAccount GetUserAccount(long userid, string coin) { return this._microService.Invoke<TradeSystem.DBModels.MoneyAccount>("GetUserAccount", userid, coin); } /// <summary> /// 獲取使用者資金資訊 /// </summary> /// <param name="userid"></param> /// <param name="coin"></param> /// <returns></returns> public virtual Task<TradeSystem.DBModels.MoneyAccount> GetUserAccountAsync(long userid, string coin) { return this._microService.InvokeAsync<TradeSystem.DBModels.MoneyAccount>("GetUserAccount", userid, coin); } } }

這樣,客戶端要訪問微服務,則可以這麼寫

            using (var client = new MicroServiceClient())
            {
                var service = client.GetMicroService<MicroServices.UserAccountService>();
                return service.GetUserAccount(this.UserInfo.userid , "USDT");
            }

MicroServiceClient是JMSClient的派生類,簡單封裝一下,用起來方便一些

    public class MicroServiceClient : JMSClient
    {
        static NetAddress[] GatewayAddresses;
        static IConfiguration Configuration;
        static MicroServiceClient()
        {
            var builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            Configuration = builder.Build();
            ConfigurationChangeCallback(null);
        }

        static void ConfigurationChangeCallback(object p)
        {
            Configuration.GetReloadToken().RegisterChangeCallback(ConfigurationChangeCallback, null);

            GatewayAddresses = Configuration.GetSection("Gateways").Get<NetAddress[]>();
        }
        public MicroServiceClient():base(GatewayAddresses , null , Global.ServiceProvider.GetService<ILogger<JMSClient>>())
        {

        }
    }