/// <summary>生成动态匿名调用内部方法(参数由TArg转为实际类型后调用,并将调用返回值转为TRes)</summary> public ApiFunc CreateMethod() { var dynamicMethod = new DynamicMethod($"{Method.Name}_{RandomCode.Generate(6)}" , typeof(object), new[] { typeof(IInlineMessage), typeof(ISerializeProxy), typeof(object) }); ilGenerator = dynamicMethod.GetILGenerator(); //如果修补操作码,则填充空间。 尽管可能消耗处理周期,但未执行任何有意义的操作。 ilGenerator.Emit(OpCodes.Nop); //构造 Ctor(); //构造属性 Properties(); //调用方法 controler.Api(); Call(); //对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。 Result(); return(dynamicMethod.CreateDelegate(typeof(ApiFunc)) as ApiFunc); }
public Test_RandomCode() { Console.WriteLine("HighLowLetterAndNumberAndSymbol:"); Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLowLetterAndNumberAndSymbol)); Console.WriteLine("HighLowLetterAndNumber:"); Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLowLetterAndNumber)); Console.WriteLine("HighLetterAndNumber:"); Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLetterAndNumber)); Console.WriteLine("HighLetter:"); Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLetter)); Console.WriteLine("Number:"); Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.Number)); Console.WriteLine("Guid[no line]:"); Console.WriteLine(RandomCode.GenerateGuid(false)); Console.WriteLine("Guid:"); Console.WriteLine(RandomCode.GenerateGuid(true)); }
/// <summary> /// 这个类相对较为简单 /// 没有太多的逻辑 都是相对单一的功能静态类或者单例 /// </summary> public Test_Utils() { // 读取配置 默认和读取程序名一样配置文件 比如此程序生成为Sample.exe那么读取对应的是Sample.exe.config文件 // 一般来说使用vs2019开发 只需要在新建一个和程序集名称一模一样的.config配置文件即可 // 注意此函数不支持读取其他文件 此demo已经创建了配置文件详见项目 Sample.config // 本类设计初只能读取两层 具体结构可以参照样例 // 此处读取第一层配置数据 string test = AppConfig.Read("test"); Console.WriteLine($"test{test}"); // 此处读取第二层配置数据 string test2 = AppConfig.Read("testgroup", "test2"); Console.WriteLine($"test2{test2}"); // 获取有效字节 // 此判定依据是在某索引位为0开始 往后4位皆为0 则认为后续数据无效实现 // 所以这里的设定还是要看具体情况来 不一定适用所有情况 // ByteHelper.GetValidLength 则是直接获取长度大小 而非返回数据 byte[] bytes = ByteHelper.GetValidByte(new byte[] { 1, 2, 3, 4, 0, 0, 0 }); Console.WriteLine($"bytes len:{bytes.Length}"); // 随机生成指定位数的字符串 // 字符串将有数字与大小写字母组成 string code = RandomCode.Generate(32); Console.WriteLine($"code:{code}"); // md5的封装 string md5Str = MD5.Encrypt("helloworld"); Console.WriteLine($"helloworld:{md5Str}"); // 获取此框架的版本信息 string versionStr = ES.Common.Utils.Version.ToString(); Console.WriteLine($"es version:{versionStr}"); }
/// <summary> /// 同步运行状态 /// </summary> /// <returns></returns> Task <bool> IMessageReceiver.LoopBegin() { ConcurrencySemaphore = new SemaphoreSlim(RabbitMQOption.Instance.Concurrency, RabbitMQOption.Instance.Concurrency); cancellationToken = new CancellationTokenSource(); if (!RabbitMQOption.Instance.ItemOptions.TryGetValue(Service.ServiceName, out Option)) { Option = new RabbitMQItemOption(); } try { IConnectionFactory conFactory = new ConnectionFactory //创建连接工厂对象 { HostName = RabbitMQOption.Instance.HostName, //IP地址 Port = RabbitMQOption.Instance.Port, //端口号 UserName = RabbitMQOption.Instance.UserName, //用户账号 Password = RabbitMQOption.Instance.Password //用户密码 }; connection = conFactory.CreateConnection(); //创建连接对象 channel = connection.CreateModel(); //创建连接会话对象 switch (Option.WrokType) { case RabbitMQWrokType.Fanout: { //声明交换机 channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "fanout"); var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}"; //声明队列 channel.QueueDeclare( queue: name, //消息队列名称 durable: Option.Durable, //是否缓存 exclusive: Option.Exclusive, autoDelete: Option.AutoDelete, arguments: null); //将队列与交换机进行绑定 channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: ""); } break; case RabbitMQWrokType.Direct: { //声明交换机 channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "direct"); var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}"; //声明队列 channel.QueueDeclare( queue: name, //消息队列名称 durable: Option.Durable, //是否缓存 exclusive: Option.Exclusive, autoDelete: Option.AutoDelete, arguments: null); //匹配多个路由 channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: Service.ServiceName); break; } case RabbitMQWrokType.Topic: { //声明交换机 channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "topic"); var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}"; //声明队列 channel.QueueDeclare( queue: name, //消息队列名称 durable: Option.Durable, //是否缓存 exclusive: Option.Exclusive, autoDelete: Option.AutoDelete, arguments: null); //匹配多个路由 channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: Service.ServiceName); } break; default: //声明队列 channel.QueueDeclare( queue: Service.ServiceName, //消息队列名称 durable: Option.Durable, //是否缓存 exclusive: Option.Exclusive, autoDelete: Option.AutoDelete, arguments: null); break; } if (Option.Qos > 0) { channel.BasicQos(0, Option.Qos, false);//告诉Rabbit每次只能向消费者发送一条信息,再消费者未确认之前,不再向他发送信息 } } catch (Exception ex) { Logger.Exception(ex); } return(Task.FromResult(true)); }