Quellcode durchsuchen

RabbitMQ消息队列测试完成

dev/1.0.1
stevelee vor 2 Jahren
Ursprung
Commit
6c43080e1d
25 geänderte Dateien mit 247 neuen und 580 gelöschten Zeilen
  1. +0
    -8
      src/BPA.Component.ApolloClient/BPA.Component.ApolloClientTester/Program.cs
  2. +0
    -1
      src/BPA.Component.ApolloClient/BPA.Component.ApolloClientWebTester/BPA.Component.ApolloClientWebTester/Properties/launchSettings.json
  3. +120
    -121
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Base/BaseConsumer.cs
  4. +6
    -5
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Base/BaseProducer.cs
  5. +4
    -4
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Extensions/RabbitMqConfigExtensions.cs
  6. +4
    -2
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Extensions/RabbitMqQueueConfigExtension.cs
  7. +5
    -5
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Provider/RabbitMqProvider.cs
  8. +5
    -2
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/BPA.Component.RabbitMQClientTester.csproj
  9. +1
    -1
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Default/TestDefalutQueueConsumer.cs
  10. +2
    -1
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Default/TestDefaultQueueProducer.cs
  11. +2
    -3
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Delays/TestDelayQueueConsumer.cs
  12. +0
    -37
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Dynamic/TestCustomDynamicQueueConsumer.cs
  13. +0
    -27
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Dynamic/TestCustomDynamicQueueProducer.cs
  14. +0
    -28
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/MqNameConfig.cs
  15. +13
    -12
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/TestConfig.cs
  16. +3
    -0
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/TestMsgBody.cs
  17. +64
    -228
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Program.cs
  18. +7
    -5
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Properties/launchSettings.json
  19. +5
    -1
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/BPA.Component.RabbitMQClientWebTester.csproj
  20. +0
    -32
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/Controllers/WeatherForecastController.cs
  21. +6
    -21
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/Properties/launchSettings.json
  22. +0
    -12
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/WeatherForecast.cs
  23. +0
    -8
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/appsettings.Development.json
  24. +0
    -9
      src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/appsettings.json
  25. +0
    -7
      src/BPA.Component.sln

+ 0
- 8
src/BPA.Component.ApolloClient/BPA.Component.ApolloClientTester/Program.cs Datei anzeigen

@@ -34,14 +34,6 @@ namespace BPA.Component.ApolloClientTester
/// </summary>
private static void TestUseRedisSingleton()
{
// var cities = new List<City>
// {
// new City {Name = "成都"},
// new City {Name = "上海"},
// new City {Name = "北京"}
// };
// var json = cities.ToJson();

var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();
IConfiguration configuration = builder.Build();


+ 0
- 1
src/BPA.Component.ApolloClient/BPA.Component.ApolloClientWebTester/BPA.Component.ApolloClientWebTester/Properties/launchSettings.json Datei anzeigen

@@ -4,7 +4,6 @@
"BPA.Component.ApolloClientWebTester": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "testconfig",
"applicationUrl": "http://localhost:5022",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",


+ 120
- 121
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Base/BaseConsumer.cs Datei anzeigen

@@ -6,151 +6,150 @@ using Microsoft.Extensions.Logging;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;

namespace BPA.Component.RabbitMQClient.Base
namespace BPA.Component.RabbitMQClient.Base;

/// <summary>
/// BaseConsumer,必须重写父类的Dequeue,以便接受消息
/// </summary>
/// <typeparam name="TMsgBody"></typeparam>
/// <typeparam name="TConsumer"></typeparam>
public abstract class BaseConsumer<TMsgBody, TConsumer> : IDisposable
{
/// <summary>
/// BaseConsumer ,必须重写父类的 Dequeue,以便接受消息
/// logger
/// </summary>
/// <typeparam name="TMsgBody"></typeparam>
/// <typeparam name="TConsumer"></typeparam>
public abstract class BaseConsumer<TMsgBody, TConsumer> : IDisposable
{
/// <summary>
/// logger
/// </summary>
public readonly ILogger<TConsumer> Logger;
public readonly ILogger<TConsumer> Logger;

/// <summary>
/// Config
/// </summary>
internal RabbitMqQueueConfig Config;
/// <summary>
/// Config
/// </summary>
internal RabbitMqQueueConfig Config;

/// <summary>
/// 消费者ID
/// </summary>
public string ConsumeId { private set; get; }
/// <summary>
/// 消费者ID
/// </summary>
public string ConsumeId { private set; get; }

/// <summary>
/// BaseConsumer
/// </summary>
/// <param name="logger"></param>
public BaseConsumer(ILogger<TConsumer> logger)
{
this.Logger = logger;
}
/// <summary>
/// BaseConsumer
/// </summary>
/// <param name="logger"></param>
public BaseConsumer(ILogger<TConsumer> logger)
{
this.Logger = logger;
}

/// <summary>
/// 初始化
/// </summary>
/// <param name="config"></param>
internal void Init(RabbitMqQueueConfig config)
{
this.Config = config;
InitConsumer();
config.InitConsumer = InitConsumer;
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="config"></param>
internal void Init(RabbitMqQueueConfig config)
{
this.Config = config;
InitConsumer();
config.InitConsumer = InitConsumer;
}

/// <summary>
/// 重新连接
/// </summary>
internal void ReStart() => Config.ReStart();
/// <summary>
/// 重新连接
/// </summary>
internal void ReStart() => Config.ReStart();

/// <summary>
/// 定义消费者
/// </summary>
private void InitConsumer()
/// <summary>
/// 定义消费者
/// </summary>
private void InitConsumer()
{
if (Config.Channel == null)
throw new Exception("请先 UseQueue");
//初始化消费者
var consumer = new EventingBasicConsumer(Config.Channel);
consumer.Received += (model, ea) =>
{
if (Config.Channel == null)
throw new Exception("请先 UseQueue");
//初始化消费者
var consumer = new EventingBasicConsumer(Config.Channel);
consumer.Received += (model, ea) =>
TMsgBody msgBody = default;
var json = Encoding.UTF8.GetString(ea.Body.ToArray());
try
{
msgBody = Newtonsoft.Json.JsonConvert.DeserializeObject<TMsgBody>(json, RabbitMQProvider.JsonSerializerSettings);
}
catch (Exception ex)
{
Logger.LogError(ex, "消息队列{queueName}消费消息失败:{message}", Config.Option.QueueName, json);
if (Config.Option.IsAutoAck)
Config.Channel.BasicAck(ea.DeliveryTag, false);
return;
}

if (Config.Option.IsAutoAck)
{
TMsgBody msgBody = default;
var json = Encoding.UTF8.GetString(ea.Body.ToArray());
try
{
msgBody = Newtonsoft.Json.JsonConvert.DeserializeObject<TMsgBody>(json, RabbitMQProvider.JsonSerializerSettings);
Dequeue(msgBody, ea);
}
catch (Exception ex)
{
Logger.LogError(ex, "消息队列{queueName}消费消息失败:{message}", Config.Option.QueueName, json);
if (Config.Option.IsAutoAck)
Config.Channel.BasicAck(ea.DeliveryTag, false);
return;
Config.Channel.BasicAck(ea.DeliveryTag, false);
}
if (Config.Option.IsAutoAck)
}
else
{
try
{
try
{
Dequeue(msgBody, ea);
}
catch (Exception ex)
{
Logger.LogError(ex, "消息队列{queueName}消费消息失败:{message}", Config.Option.QueueName, json);
var result = Dequeue(msgBody, ea);
if (Config.Channel.IsClosed) return;
if (result) //消息处理成功,ack提交
Config.Channel.BasicAck(ea.DeliveryTag, false);
}
else //消息处理失败,把消息重新放入队列
Config.Channel.BasicNack(ea.DeliveryTag, false, true);
}
else
catch (Exception ex)
{
try
{
var result = Dequeue(msgBody, ea);
if (Config.Channel.IsClosed) return;
if (result)//消息处理成功,ack提交
Config.Channel.BasicAck(ea.DeliveryTag, false);
else //消息处理失败,把消息重新放入队列
Config.Channel.BasicNack(ea.DeliveryTag, false, true);
}
catch (Exception ex)
{
Logger.LogError(ex, "消息队列{queueName}消费消息失败:{message}", Config.Option.QueueName, json);
if (Config.Channel.IsClosed) return;
//消息处理失败,把消息重新放入队列
Config.Channel.BasicNack(ea.DeliveryTag, false, true);
}
Logger.LogError(ex, "消息队列{queueName}消费消息失败:{message}", Config.Option.QueueName, json);
if (Config.Channel.IsClosed) return;
//消息处理失败,把消息重新放入队列
Config.Channel.BasicNack(ea.DeliveryTag, false, true);
}
};
Console.WriteLine();
Console.WriteLine($"*bpa.rabbitmqclient* 初始化消费者 : start ---------------------------");
Console.WriteLine($"*bpa.rabbitmqclient* [{nameof(Config.Option.QueueName)}]={ Config.Option.QueueName}");
Console.WriteLine($"*bpa.rabbitmqclient* [FullName]={ this.GetType().FullName}");
Console.WriteLine($"*bpa.rabbitmqclient* [HashCode]={ this.GetHashCode()}");
Console.WriteLine($"*bpa.rabbitmqclient* [ConsumerID]={ ConsumeId}");
Console.WriteLine($"*bpa.rabbitmqclient* [Exchange]={Config.Option.ExchangeName}");
Console.WriteLine($"*bpa.rabbitmqclient* 初始化消费者 : end ---------------------------");
ConsumeId = Config.Channel.BasicConsume(queue: Config.Option.QueueName, autoAck: Config.Option.IsAutoAck, consumer: consumer);
}

/// <summary>
/// 消息出列,消息接受者处理成功或者失败后返回true | false,
/// 如果消息AutoAck=false(<see cref="QueueOption.IsAutoAck"/>) ,那么当返回true是,提交ack,返回false是消息重新入列
/// </summary>
/// <param name="msgBody">消息内容</param>
/// <param name=" eventArgs">原始事件信息</param>
public abstract bool Dequeue(TMsgBody msgBody, BasicDeliverEventArgs eventArgs);

/// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
Config.Channel?.Close();
Config.Channel?.Dispose();
}
}
};
Console.WriteLine();
Console.WriteLine($"*bpa.rabbitmqclient* 初始化消费者 : start ---------------------------");
Console.WriteLine($"*bpa.rabbitmqclient* [{nameof(Config.Option.QueueName)}]={Config.Option.QueueName}");
Console.WriteLine($"*bpa.rabbitmqclient* [FullName]={this.GetType().FullName}");
Console.WriteLine($"*bpa.rabbitmqclient* [HashCode]={this.GetHashCode()}");
Console.WriteLine($"*bpa.rabbitmqclient* [ConsumerID]={ConsumeId}");
Console.WriteLine($"*bpa.rabbitmqclient* [Exchange]={Config.Option.ExchangeName}");
Console.WriteLine($"*bpa.rabbitmqclient* 初始化消费者 : end ---------------------------");
ConsumeId = Config.Channel.BasicConsume(queue: Config.Option.QueueName, autoAck: Config.Option.IsAutoAck, consumer: consumer);
}

/// <summary>
/// 关闭通道
/// </summary>
internal void ColseChannel()
{
Config.Channel?.Close();
}
/// <summary>
/// 消息出列,消息接受者处理成功或者失败后返回true | false,
/// 如果消息AutoAck=false(<see cref="QueueOption.IsAutoAck"/>) ,那么当返回true是,提交ack,返回false是消息重新入列
/// </summary>
/// <param name="msgBody">消息内容</param>
/// <param name=" eventArgs">原始事件信息</param>
public abstract bool Dequeue(TMsgBody msgBody, BasicDeliverEventArgs eventArgs);

/// <summary>
/// 判断通道是否关闭
/// </summary>
internal bool ChannelIsColsed => Config.Channel == null || Config.Channel.IsClosed;
/// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
Config.Channel?.Close();
Config.Channel?.Dispose();
}

/// <summary>
/// 关闭通道
/// </summary>
internal void ColseChannel()
{
Config.Channel?.Close();
}
}

/// <summary>
/// 判断通道是否关闭
/// </summary>
internal bool ChannelIsColsed => Config.Channel == null || Config.Channel.IsClosed;
}

+ 6
- 5
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Base/BaseProducer.cs Datei anzeigen

@@ -44,16 +44,17 @@ namespace BPA.Component.RabbitMQClient.Base
routingKey ??= string.Empty;
var properties = config.Channel.CreateBasicProperties();
//需要注意的是BasicProperties.deliveryMode,Non-persistent (1) or persistent (2) 这里指的是消息的持久化,
properties.DeliveryMode = (byte)config.Option.DeliveryMode;
properties.DeliveryMode = (byte) config.Option.DeliveryMode;
properties.Persistent = config.Option.DeliveryMode == DeliveryModeType.Persistent;
if (config.Option.Type == ExchangeType.X_Delayed_Message && expiration.HasValue)
{
(properties.Headers ??= new Dictionary<string, object>()).Add("x-delay", expiration.Value.ToString());
}
else if (expiration.HasValue) //毫秒
else if (expiration.HasValue) //毫秒
{
properties.Expiration = expiration.Value.ToString();
}

var json = JsonConvert.SerializeObject(msgBody, RabbitMQProvider.JsonSerializerSettings);
var bodyBytes = Encoding.UTF8.GetBytes(json);
config.Channel.BasicPublish(config.Option.Name, routingKey, properties, bodyBytes);
@@ -71,9 +72,9 @@ namespace BPA.Component.RabbitMQClient.Base
routingKey ??= string.Empty;
var properties = config.Channel.CreateBasicProperties();
//需要注意的是BasicProperties.deliveryMode,Non-persistent (1) or persistent (2) 这里指的是消息的持久化,
properties.DeliveryMode = (byte)config.Option.DeliveryMode;
properties.DeliveryMode = (byte) config.Option.DeliveryMode;
properties.Persistent = config.Option.DeliveryMode == DeliveryModeType.Persistent;
if (expiration.HasValue)//毫秒
if (expiration.HasValue) //毫秒
properties.Expiration = expiration.Value.ToString();
var json = JsonConvert.SerializeObject(msgBody, RabbitMQProvider.JsonSerializerSettings);
var bodyBytes = Encoding.UTF8.GetBytes(json);
@@ -98,4 +99,4 @@ namespace BPA.Component.RabbitMQClient.Base
Sender.Invoke(msgBody, routingKey, expiration);
}
}
}
}

+ 4
- 4
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Extensions/RabbitMqConfigExtensions.cs Datei anzeigen

@@ -23,7 +23,7 @@ namespace BPA.Component.RabbitMQClient.Extensions
/// <param name="service"></param>
/// <param name="configFunc"></param>
/// <returns></returns>
public static IServiceCollection UseRabbitMQProvider(this IServiceCollection service, Func<IServiceProvider, RabbitMqConnectionConfig> configFunc)
public static IServiceCollection AddRabbitMQProvider(this IServiceCollection service, Func<IServiceProvider, RabbitMqConnectionConfig> configFunc)
{
if (configFunc == null)
throw new ArgumentNullException(nameof(configFunc));
@@ -38,7 +38,7 @@ namespace BPA.Component.RabbitMQClient.Extensions
/// <param name="service"></param>
/// <param name="buildRabbitMQProvider"></param>
/// <returns></returns>
public static IServiceCollection UseRabbitMQProvider<TRabbitMQProvider>(this IServiceCollection service, Func<IServiceProvider, TRabbitMQProvider> buildRabbitMQProvider) where TRabbitMQProvider : RabbitMQProvider, new()
public static IServiceCollection AddRabbitMQProvider<TRabbitMQProvider>(this IServiceCollection service, Func<IServiceProvider, TRabbitMQProvider> buildRabbitMQProvider) where TRabbitMQProvider : RabbitMQProvider, new()
{
service.AddSingleton(sp => buildRabbitMQProvider(sp));
return service;
@@ -51,7 +51,7 @@ namespace BPA.Component.RabbitMQClient.Extensions
/// <typeparam name="TMsgBody"></typeparam>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection UseRabbitMQProducer<TProducer, TMsgBody>(this IServiceCollection services) where TProducer : BaseProducer<TMsgBody, TProducer>
public static IServiceCollection AddRabbitMQProducer<TProducer, TMsgBody>(this IServiceCollection services) where TProducer : BaseProducer<TMsgBody, TProducer>
{
services.AddSingleton<TProducer>();
return services;
@@ -64,7 +64,7 @@ namespace BPA.Component.RabbitMQClient.Extensions
/// <typeparam name="TMsgBody"></typeparam>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection UseRabbitMQConsumer<TConsumer, TMsgBody>(this IServiceCollection services) where TConsumer : BaseConsumer<TMsgBody, TConsumer>
public static IServiceCollection AddRabbitMQConsumer<TConsumer, TMsgBody>(this IServiceCollection services) where TConsumer : BaseConsumer<TMsgBody, TConsumer>
{
services.AddTransient<TConsumer>();
return services;


+ 4
- 2
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Extensions/RabbitMqQueueConfigExtension.cs Datei anzeigen

@@ -1,4 +1,5 @@
using BPA.Component.RabbitMQClient.Base;
using System;
using BPA.Component.RabbitMQClient.Base;
using BPA.Component.RabbitMQClient.Config;
using BPA.Component.RabbitMQClient.Options;
using BPA.Component.RabbitMQClient.Result;
@@ -39,7 +40,8 @@ namespace BPA.Component.RabbitMQClient.Extensions
/// </summary>
/// <typeparam name="TProducer"></typeparam>
/// <typeparam name="TMsgBody"></typeparam>
/// <param name="config"></param>
/// <param name="config"></param>
/// <exception cref="ArgumentNullException"></exception>
/// <returns></returns>
public static IRegisterProducerResult UseProducer<TMsgBody, TProducer>(this RabbitMqQueueConfig config)
where TProducer : BaseProducer<TMsgBody, TProducer>


+ 5
- 5
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClient/Provider/RabbitMqProvider.cs Datei anzeigen

@@ -75,11 +75,11 @@ namespace BPA.Component.RabbitMQClient.Provider
private void BuildConnectionFactory()
{
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: start ---------------------------");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [{MQConfig.HostName }]={ MQConfig.HostName }");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [{MQConfig.Port}]={ MQConfig.Port}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [{MQConfig.Password}]={ MQConfig.Password}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [{MQConfig.UserName}]={ MQConfig.UserName}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [{MQConfig.VirtualHost}]={ MQConfig.VirtualHost}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [HostName]={ MQConfig.HostName }");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [Port]={ MQConfig.Port}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [Password]={ MQConfig.Password}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [UserName]={ MQConfig.UserName}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: [VirtualHost]={ MQConfig.VirtualHost}");
Console.WriteLine($"*bpa.rabbitmqclient* build connetion info: end ---------------------------");
var factory = new ConnectionFactory()
{


+ 5
- 2
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/BPA.Component.RabbitMQClientTester.csproj Datei anzeigen

@@ -10,11 +10,14 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\BPA.Component.RabbitMQClient\BPA.Component.RabbitMQClient.csproj" />
<ProjectReference Include="..\..\BPA.Component.ApolloClient\BPA.Component.ApolloClient\BPA.Component.ApolloClient.csproj" />
<ProjectReference Include="..\..\BPA.Component.LogClient\BPA.Component.LogClient\BPA.Component.LogClient.csproj" />
<ProjectReference Include="..\BPA.Component.RabbitMQClient\BPA.Component.RabbitMQClient.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="BPA.Component.RabbitMQClient" Version="1.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
</ItemGroup>


+ 1
- 1
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Default/TestDefalutQueueConsumer.cs Datei anzeigen

@@ -22,7 +22,6 @@ namespace BPA.Component.RabbitMQClientTester.Default
/// 消息出列
/// </summary>
/// <param name="msgBody"></param>
/// <param name="queueConfig"></param>
/// <param name="eventArgs"></param>
/// <returns></returns>
public override bool Dequeue(TestMsgBody msgBody, BasicDeliverEventArgs eventArgs)
@@ -30,6 +29,7 @@ namespace BPA.Component.RabbitMQClientTester.Default
Console.WriteLine($"\nTestDefaultQueueConsumer_1_消息出列:" +
$"\n\t\t\t[{GetHashCode()}]-[{ConsumeId}]" +
$"\n\t\t\t[{nameof(msgBody.Id)}]={msgBody.Id},{nameof(msgBody.Date)}]={msgBody.Date}");
//返回false 代表消费失败,消息会返回队列,返回true代表消费成功
return true;
}


+ 2
- 1
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Default/TestDefaultQueueProducer.cs Datei anzeigen

@@ -17,8 +17,9 @@ namespace BPA.Component.RabbitMQClientTester.Default
/// 消息入列,可以不重写,如果重写必须调用父类的 Enqueue
/// </summary>
/// <param name="msgBody"></param>
/// <param name="routingKey"></param>
/// <param name="expiration"></param>
public override void Enqueue(TestMsgBody msgBody, string routingKey = null, long? expiration = null)
public override void Enqueue(TestMsgBody msgBody, string? routingKey = null, long? expiration = null)
{
Console.WriteLine($"TestDefaultQueueProducer.消息入列:[{nameof(msgBody.Id)}]={msgBody.Id},{nameof(msgBody.Date)}]={msgBody.Date}");
base.Enqueue(msgBody, routingKey, expiration);


+ 2
- 3
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Delays/TestDelayQueueConsumer.cs Datei anzeigen

@@ -22,14 +22,13 @@ namespace BPA.Component.RabbitMQClientTester.Delays
/// 消息出列
/// </summary>
/// <param name="msgBody"></param>
/// <param name="queueConfig"></param>
/// <param name="eventArgs"></param>
/// <returns></returns>
public override bool Dequeue(TestMsgBody msgBody, BasicDeliverEventArgs eventArgs)
{
Console.WriteLine($"\n\t\t Delay:{((int)(DateTime.Now - msgBody.Date).TotalSeconds) * 1000} , {Newtonsoft.Json.JsonConvert.SerializeObject(msgBody)}");
Console.WriteLine($"TestDelayQueueConsumer.消息出列: Delay:{(int) (DateTime.Now - msgBody.Date).TotalSeconds * 1000},{Newtonsoft.Json.JsonConvert.SerializeObject(msgBody)}");
//返回false 代表消费失败,消息会返回队列,返回true代表消费成功
return true;
}
}
}
}

+ 0
- 37
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Dynamic/TestCustomDynamicQueueConsumer.cs Datei anzeigen

@@ -1,37 +0,0 @@
using BPA.Component.RabbitMQClient.Base;
using BPA.Component.RabbitMQClientTester.Modesl;
using Microsoft.Extensions.Logging;
using RabbitMQ.Client.Events;

namespace BPA.Component.RabbitMQClientTester.Dynamic
{
/// <summary>
/// 测试自定义交换+动态机队列消费者1
/// </summary>
public class TestCustomDynamicQueueConsumer : BaseConsumer<TestMsgBody, TestCustomDynamicQueueConsumer>
{
private readonly IServiceProvider serviceProvider;

public TestCustomDynamicQueueConsumer(IServiceProvider serviceProvider, ILogger<TestCustomDynamicQueueConsumer> logger) : base(logger)
{
this.serviceProvider = serviceProvider;
}

/// <summary>
/// 消息出列
/// </summary>
/// <param name="msgBody"></param>
/// <param name="queueConfig"></param>
/// <param name="eventArgs"></param>
/// <returns></returns>
public override bool Dequeue(TestMsgBody msgBody, BasicDeliverEventArgs eventArgs)
{
Console.WriteLine($"\nTestDynamicQueueConsumer_1_消息出列:" +
$"\n\t\t\t[{GetHashCode()}]-[{ConsumeId}]" +
$"\n\t\t\t[{nameof(msgBody.Id)}]={msgBody.Id},{nameof(msgBody.Date)}]={msgBody.Date}");
//返回false 代表消费失败,消息会返回队列,返回true代表消费成功
return true;
}
}
}

+ 0
- 27
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Dynamic/TestCustomDynamicQueueProducer.cs Datei anzeigen

@@ -1,27 +0,0 @@
using BPA.Component.RabbitMQClient.Base;
using BPA.Component.RabbitMQClientTester.Modesl;
using Microsoft.Extensions.Logging;

namespace BPA.Component.RabbitMQClientTester.Dynamic
{
/// <summary>
/// 测试自定义交换机+动态队列生产者
/// </summary>
public class TestCustomDynamicQueueProducer : BaseProducer<TestMsgBody, TestCustomDynamicQueueProducer>
{
public TestCustomDynamicQueueProducer(ILogger<TestCustomDynamicQueueProducer> logger) : base(logger)
{
}

/// <summary>
/// 消息入列,可以不重写,如果重写必须调用父类的 Enqueue
/// </summary>
/// <param name="msgBody"></param>
/// <param name="expiration"></param>
public override void Enqueue(TestMsgBody msgBody, string routingKey = null, long? expiration = null)
{
Console.WriteLine($"TestDynamicQueueProducer.消息入列:[{nameof(msgBody.Id)}]={msgBody.Id},{nameof(msgBody.Date)}]={msgBody.Date}");
base.Enqueue(msgBody, routingKey, expiration);
}
}
}

+ 0
- 28
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/MqNameConfig.cs Datei anzeigen

@@ -14,11 +14,6 @@ namespace BPA.Component.RabbitMQClientTester.Modesl
/// </summary>
public readonly static QueueName TestDefaultQueue1 = QueueName.Build(nameof(TestDefaultQueue1));

/// <summary>
/// 测试队列2,消息体 <see cref="TestMsgBody"/>
/// </summary>
public readonly static QueueName TestDefaultQueue2 = QueueName.Build(nameof(TestDefaultQueue2));

#endregion

#region 自定义交换机
@@ -40,24 +35,6 @@ namespace BPA.Component.RabbitMQClientTester.Modesl

#endregion

#region 自定义交换机+动态队列

/// <summary>
/// 测试自定义+动态队列交换机名称
/// </summary>
public static readonly ExchangeName TestCustomDynamicQueueExchange = ExchangeName.Build(nameof(TestCustomDynamicQueueExchange));

/// <summary>
/// 测试队列+动态队列,消息体 <see cref="TestMsgBody"/>
/// 一定要BuildDynamic ,属性必须用get 方法
/// </summary>
public static QueueName TestCustomDynamicQueue
{
get => QueueName.BuildDynamic(nameof(TestCustomDynamicQueue));
}

#endregion

#region

/// <summary>
@@ -75,11 +52,6 @@ namespace BPA.Component.RabbitMQClientTester.Modesl
/// </summary>
public static readonly QueueName TestDelayQueue1 = QueueName.Build(nameof(TestDelayQueue1));

/// <summary>
/// 延时队列,消息体 <see cref="TestMsgBody"/>
/// </summary>
public static readonly QueueName TestDelayQueue2 = QueueName.Build(nameof(TestDelayQueue2));

#endregion
}
}

+ 13
- 12
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/TestConfig.cs Datei anzeigen

@@ -1,26 +1,27 @@
using BPA.Component.RabbitMQClient.Connection;
using BPA.Component.ApolloClient;
using BPA.Component.RabbitMQClient.Connection;
using Com.Ctrip.Framework.Apollo;
using Microsoft.Extensions.Configuration;

namespace BPA.Component.RabbitMQClientTester.Modesl
{
/// <summary>
/// test项目配置
/// </summary>
public static class TestConfig
public class TestConfig : ApolloBPAConfig<TestConfig>
{
#region 当前应用配置

/// <summary>
/// RabbitMQ配置
/// </summary>
public static RabbitMqConnectionConfig RabbitMQConfig = new RabbitMqConnectionConfig
{
HostName = "192.168.0.149",
Password = "admin",
Port = 5672,
UserName = "admin",
VirtualHost = "admin_vhost"
};

/// </summary>
[AutoWrite]
public RabbitMqConnectionConfig RabbitMqConfig { get; set; }
#endregion

public TestConfig(ApolloConfigurationManager apolloConfigurationManager, IConfiguration configuration) : base(apolloConfigurationManager, configuration)
{
}
}
}

+ 3
- 0
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Modesl/TestMsgBody.cs Datei anzeigen

@@ -15,6 +15,9 @@
/// </summary>
public DateTime Date{set;get;}

/// <summary>
/// Message
/// </summary>
public string Message { set; get; }
}
}

+ 64
- 228
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Program.cs Datei anzeigen

@@ -1,11 +1,13 @@
using BPA.Component.RabbitMQClient.Enums;
using BPA.Component.ApolloClient;
using BPA.Component.LogClient.Extensions;
using BPA.Component.RabbitMQClient.Enums;
using BPA.Component.RabbitMQClient.Extensions;
using BPA.Component.RabbitMQClient.Provider;
using BPA.Component.RabbitMQClientTester.Custom;
using BPA.Component.RabbitMQClientTester.Default;
using BPA.Component.RabbitMQClientTester.Delays;
using BPA.Component.RabbitMQClientTester.Dynamic;
using BPA.Component.RabbitMQClientTester.Modesl;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

@@ -15,78 +17,45 @@ namespace BPA.Component.RabbitMQClientTester
{
private static void Main(string[] args)
{
Console.WriteLine("1=测试默认交换机, 2=测试自定义交换机, 3=测试自定义交换机 + 动态队列实现真正广播,4=延时");
var cmd = Console.ReadLine();
switch (cmd)
{
case "1":
TestDefaultExchange();
break;
case "2":
TestCustomExchange();
break;
case "3":
TestCustomExchange_Dynamic_Queue();
break;
case "4":
TestDelay();
break;
default:
Console.WriteLine("命令错误");
break;
}

DelayExchange();
Console.ReadLine();
}

/// <summary>
/// 测试默认交换机
/// 默认交换机
/// </summary>
public static void TestDefaultExchange()
private static void DefaultExchange()
{
var services = new ServiceCollection();
services.AddLogging(configure => { configure.AddConsole(); });

//注入RabbitMQProvider
services.UseRabbitMQProvider(sp => TestConfig.RabbitMQConfig);
//注入生产者,单例
services.UseRabbitMQProducer<TestDefaultQueueProducer, TestMsgBody>();
//注入消费者,多例
services.UseRabbitMQConsumer<TestDefaultQueueConsumer1, TestMsgBody>();
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();

//创建容器提供者
var sp = services.BuildServiceProvider();
var configuration = builder.Build();
configuration.AddApolloConfiguration();

//获取rabbitMqProvider
var rabbitMqProvider = sp.UseRabbitMQProvider<RabbitMQProvider>();

//使用默认交换机的话,需要用队列配置对象 启用消息生产者
var services = new ServiceCollection();
services.AddBPALog();
services.AddApollo<TestConfig>();
services.AddRabbitMQProvider(provider => provider.GetService<TestConfig>()?.RabbitMqConfig);
services.AddRabbitMQProducer<TestDefaultQueueProducer, TestMsgBody>();
services.AddRabbitMQConsumer<TestDefaultQueueConsumer1, TestMsgBody>();

#region 启用消费者1
var serviceProvider = services.BuildServiceProvider();
var rabbitMqProvider = serviceProvider.UseRabbitMQProvider<RabbitMQProvider>();

//启用消费者1, 3个消费者实例
var queue1 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestDefaultQueue1);
//额外配置
queue1.ConfigOption(option => { });
//启用队列
queue1.ConfigOption(_ => { });
queue1.UseQueue();

//使用默认交换机的话,需要用队列配置对象 启用消息生产者
queue1.UseProducer<TestMsgBody, TestDefaultQueueProducer>();

var producer = sp.GetService<TestDefaultQueueProducer>();
var producer = serviceProvider.GetService<TestDefaultQueueProducer>();
if (producer == null) throw new ArgumentNullException();
for (var i = 0; i <= 20; i++)
{
producer.Enqueue(new TestMsgBody {Date = DateTime.Now, Id = i});
}

//启用一个消费者
queue1.UseConsumer<TestMsgBody, TestDefaultQueueConsumer1>();
//启用多个消费者
queue1.UseMultipleConsumer<TestMsgBody, TestDefaultQueueConsumer1>(3);

#endregion
queue1.UseConsumer<TestMsgBody, TestDefaultQueueConsumer1>(); //启用一个消费者
queue1.UseMultipleConsumer<TestMsgBody, TestDefaultQueueConsumer1>(3); //启用多个消费者

var id = 0;
while (true)
@@ -94,228 +63,95 @@ namespace BPA.Component.RabbitMQClientTester
//生产消息
producer.Enqueue(new TestMsgBody {Date = DateTime.Now, Id = id++});
Console.ReadLine();
Thread.Sleep(1000);
}
}

/// <summary>
/// 测试自定义交换机
/// </summary>
public static void TestCustomExchange()
private static void CustomExchange()
{
var services = new ServiceCollection();
services.AddLogging(configure => { configure.AddConsole(); });

//注入RabbitMQProvider
services.UseRabbitMQProvider(sp => TestConfig.RabbitMQConfig);
//注入生产者,单例
services.UseRabbitMQProducer<TestCustomQueueProducer, TestMsgBody>();
//注入消费者,多例
services.UseRabbitMQConsumer<TestCustomQueueConsumer1, TestMsgBody>();

//注入消费者2,多例
services.UseRabbitMQConsumer<TestCustomQueueConsumer2, TestMsgBody>();
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();

//创建容器提供者
var sp = services.BuildServiceProvider();
var configuration = builder.Build();
configuration.AddApolloConfiguration();

//获取rabbitMqProvider
var rabbitMqProvider = sp.UseRabbitMQProvider<RabbitMQProvider>();
var services = new ServiceCollection();
services.AddBPALog();
services.AddApollo<TestConfig>();
services.AddRabbitMQProvider(provider => provider.GetService<TestConfig>()?.RabbitMqConfig);
services.AddRabbitMQProducer<TestCustomQueueProducer, TestMsgBody>();
services.AddRabbitMQConsumer<TestCustomQueueConsumer1, TestMsgBody>();
services.AddRabbitMQConsumer<TestCustomQueueConsumer2, TestMsgBody>();

#region 初始化生产者
var serviceProvider = services.BuildServiceProvider();
var rabbitMqProvider = serviceProvider.UseRabbitMQProvider<RabbitMQProvider>();

//构建 TestQueue 的队列配置信息,启用生产者,启用消费者
var exchangeConfig = rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestCustomExchange, ExchangeType.Fanout);
//exchangeConfig.ConfigOption(option => option.Type = ExchangeType.Fanout);//扇形模式
var exchangeConfig = rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestCustomExchange);
exchangeConfig.UseExchange();
//启用生成者,单例
exchangeConfig.UseProducer<TestMsgBody, TestCustomQueueProducer>();

#endregion

#region 启用消费者1

//启用消费者1 ,3个消费者实例
var queue1 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestCustomQueue1, MqNameConfig.TestCustomExchange);
//额外配置
queue1.ConfigOption(option => { });
//启用队列
queue1.ConfigOption(_ => { });
queue1.UseQueue();
//启用一个消费者
queue1.UseConsumer<TestMsgBody, TestCustomQueueConsumer1>();
//启用多个消费者
queue1.UseConsumer<TestMsgBody, TestCustomQueueConsumer1>();
queue1.UseMultipleConsumer<TestMsgBody, TestCustomQueueConsumer1>(3);

#endregion

#region 启用消费者2

//启用消费者1 ,3个消费者实例
var queue2 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestCustomQueue2, MqNameConfig.TestCustomExchange);
//额外配置
queue2.ConfigOption(option => { });
//启用队列
queue2.ConfigOption(_ => { });
queue2.UseQueue();
//启用一个消费者
queue2.UseConsumer<TestMsgBody, TestCustomQueueConsumer2>();
//启用多个消费者
queue2.UseMultipleConsumer<TestMsgBody, TestCustomQueueConsumer2>(3);

#endregion

var id = 0;
while (true)
{
var producer = sp.GetService<TestCustomQueueProducer>();
//生产消息
var producer = serviceProvider.GetService<TestCustomQueueProducer>();
producer.Enqueue(new TestMsgBody {Date = DateTime.Now, Id = id++});

Console.ReadLine();
Thread.Sleep(1000);
}
}


/// <summary>
/// 测试自定义交换机+动态队列实现 真正广播 这种广播模式 队列不会持久化 所有消息有丢失的风险
/// </summary>
public static void TestCustomExchange_Dynamic_Queue()
{
var services = new ServiceCollection();
services.AddLogging(configure => { configure.AddConsole(); });

//注入RabbitMQProvider
services.UseRabbitMQProvider(sp => TestConfig.RabbitMQConfig);
//注入生产者,单例
services.UseRabbitMQProducer<TestCustomDynamicQueueProducer, TestMsgBody>();
//注入消费者,多例
services.UseRabbitMQConsumer<TestCustomDynamicQueueConsumer, TestMsgBody>();

//注入消费者2,多例
services.UseRabbitMQConsumer<TestCustomDynamicQueueConsumer, TestMsgBody>();

//创建容器提供者
var sp = services.BuildServiceProvider();

//获取rabbitMqProvider
var rabbitMqProvider = sp.UseRabbitMQProvider<RabbitMQProvider>();

#region 初始化生产者

//构建 TestQueue 的队列配置信息,启用生产者,启用消费者
var exchangeConfig = rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestCustomDynamicQueueExchange, ExchangeType.Fanout);
//exchangeConfig.ConfigOption(option => option.Type = ExchangeType.Fanout);//扇形模式
exchangeConfig.UseExchange();
//启用生成者,单例
exchangeConfig.UseProducer<TestMsgBody, TestCustomDynamicQueueProducer>();

#endregion

//看着MqNameConfig.TestCustomDynamicQueue是一个名字,实际上是或生成多个

#region 启用消费者1

//启用消费者1 ,3个消费者实例
var queue1 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestCustomDynamicQueue,
MqNameConfig.TestCustomDynamicQueueExchange);
//额外配置
queue1.ConfigOption(option => { });
//启用队列
queue1.UseQueue();
//启用一个消费者
queue1.UseConsumer<TestMsgBody, TestCustomDynamicQueueConsumer>();
//启用多个消费者

#endregion

#region 启用消费者2

//启用消费者1 ,3个消费者实例
var queue2 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestCustomDynamicQueue,
MqNameConfig.TestCustomDynamicQueueExchange);
//额外配置
queue2.ConfigOption(option => { });
//启用队列
queue2.UseQueue();
//启用一个消费者
queue2.UseConsumer<TestMsgBody, TestCustomDynamicQueueConsumer>();

#endregion

var id = 0;
while (true)
{
var producer = sp.GetService<TestCustomDynamicQueueProducer>();
//生产消息
producer.Enqueue(new TestMsgBody {Date = DateTime.Now, Id = id++});
Console.ReadLine();
}
}


/// <summary>
/// 测试延时
/// </summary>
public static void TestDelay()
private static void DelayExchange()
{
var services = new ServiceCollection();
services.AddLogging(configure => { configure.AddConsole(); });
var builder = new ConfigurationBuilder();
builder.AddEnvironmentVariables();

//注入RabbitMQProvider
services.UseRabbitMQProvider(sp => TestConfig.RabbitMQConfig);
//注入生产者,单例
services.UseRabbitMQProducer<TestDelayQueueProducer, TestMsgBody>();
//注入消费者,多例
services.UseRabbitMQConsumer<TestDelayQueueConsumer, TestMsgBody>();
var configuration = builder.Build();
configuration.AddApolloConfiguration();

//创建容器提供者
var sp = services.BuildServiceProvider();

//获取rabbitMqProvider
var rabbitMqProvider = sp.UseRabbitMQProvider<RabbitMQProvider>();
var services = new ServiceCollection();
services.AddBPALog();
services.AddApollo<TestConfig>();
services.AddRabbitMQProvider(provider => provider.GetService<TestConfig>()?.RabbitMqConfig);
services.AddRabbitMQProducer<TestDelayQueueProducer, TestMsgBody>();
services.AddRabbitMQConsumer<TestDelayQueueConsumer, TestMsgBody>();

#region 初始化生产者 和交换机1
var serviceProvider = services.BuildServiceProvider();
var rabbitMqProvider = serviceProvider.UseRabbitMQProvider<RabbitMQProvider>();

//构建 TestQueue 的队列配置信息,启用生产者,启用消费者
var exchangeConfig1 = rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestDelayExchange1, ExchangeType.X_Delayed_Message);
exchangeConfig1.UseExchange();
//启用生成者,单例
exchangeConfig1.UseProducer<TestMsgBody, TestDelayQueueProducer>();
//场景1:消息--发送到(延时消息)--交换机1---队列1---消费者
//场景2:消息--发送到(延时消息)--交换机1---队列1---过期(延时)---交换机2---队列2---消费者
rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestDelayExchange2).UseExchange();

#endregion

//交换机2
rabbitMqProvider.BuildExchangeConfig(MqNameConfig.TestDelayExchange2, ExchangeType.Direct).UseExchange();

// 启用队列1 ,队列1中消息过期后会移交到 交换机2
var queue1 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestDelayQueue1, MqNameConfig.TestDelayExchange1);
////额外配置
//queue1.ConfigOption(option =>
//{
// //消息过期后 将消息移动到 交换机2
// option.SetDeadLetterExchangeName(MqNameConfig.TestDelayExchange2);
// //路由 用 队列2的名字
// option.SetDeadLetterRoutingKey(MqNameConfig.TestDelayQueue2);
//});
//启用队列
queue1.UseQueue();
queue1.UseConsumer<TestMsgBody, TestDelayQueueConsumer>();


////队列2从交换机2中拿到数据
//var queue2 = rabbitMqProvider.BuildQueueConfig(MqNameConfig.TestDelayQueue2, MqNameConfig.TestDelayExchange2);
//queue2.ConfigOption(option =>
//{
// option.RoutingKey = MqNameConfig.TestDelayQueue2;
//});
////启用队列
//queue2.UseQueue();
//queue2.UseConsumer<TestMsgBody, TestDelayQueueConsumer>();

var id = 0;
while (true)
{
//消息--发送到(延时消息)--交换机1---队列1----过期(延时)--交换机2--队列2--消费者
var producer = sp.GetService<TestDelayQueueProducer>();
//生产消息
var producer = serviceProvider.GetService<TestDelayQueueProducer>();
var delay = new Random().Next(1, 15) * 1000L;
producer.Enqueue(new TestMsgBody {Date = DateTime.Now, Id = id++, Message = $"延时{delay}"}, null, delay);
Console.ReadLine();


+ 7
- 5
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientTester/Properties/launchSettings.json Datei anzeigen

@@ -1,12 +1,14 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"BPA.Component.LogClientTester": {
"BPA.Component.RabbitMQClientTester": {
"commandName": "Project",
"environmentVariables": {
"APOLLO_META_SERVER_URL": "http://192.168.0.147:7010",
"APOLLO_COMMON_NAMESPACE": "BPA.test.common",
"APP_NAME": "BPA.test"
"ASPNETCORE_ENVIRONMENT": "Development",
"APOLLO_META_SERVER_URL": "http://10.2.1.21:28080",
"APOLLO_COMMON_NAMESPACE": "Dev.Common",
"APP_NAME": "BPA-DEV"
}
}
}
}
}

+ 5
- 1
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/BPA.Component.RabbitMQClientWebTester.csproj Datei anzeigen

@@ -7,7 +7,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3"/>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>

<ItemGroup>
<Folder Include="Controllers" />
</ItemGroup>

</Project>

+ 0
- 32
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/Controllers/WeatherForecastController.cs Datei anzeigen

@@ -1,32 +0,0 @@
using Microsoft.AspNetCore.Mvc;

namespace BPA.Component.RabbitMQClientWebTester.Controllers;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

private readonly ILogger<WeatherForecastController> _logger;

public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}

[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}

+ 6
- 21
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/Properties/launchSettings.json Datei anzeigen

@@ -1,30 +1,15 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57481",
"sslPort": 44386
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"BPA.Component.RabbitMQClientWebTester": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7262;http://localhost:5262",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5023",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Development",
"APOLLO_META_SERVER_URL": "http://10.2.1.21:28080",
"APOLLO_COMMON_NAMESPACE": "Dev.Common",
"APP_NAME": "BPA-DEV"
}
}
}


+ 0
- 12
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/WeatherForecast.cs Datei anzeigen

@@ -1,12 +0,0 @@
namespace BPA.Component.RabbitMQClientWebTester;

public class WeatherForecast
{
public DateTime Date { get; set; }

public int TemperatureC { get; set; }

public int TemperatureF => 32 + (int) (TemperatureC / 0.5556);

public string? Summary { get; set; }
}

+ 0
- 8
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/appsettings.Development.json Datei anzeigen

@@ -1,8 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

+ 0
- 9
src/BPA.Component.RabbitMQClient/BPA.Component.RabbitMQClientWebTester/appsettings.json Datei anzeigen

@@ -1,9 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

+ 0
- 7
src/BPA.Component.sln Datei anzeigen

@@ -60,8 +60,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.Component.ApolloClientW
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.Component.ClickHouseClientTester", "BPA.Component.ClickHouseClient\BPA.Component.ClickHouseClientTester\BPA.Component.ClickHouseClientTester.csproj", "{F81FDB53-2CCD-47EF-8766-7CBEF3EDEB8D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPA.Component.RabbitMQClientWebTester", "BPA.Component.RabbitMQClient\BPA.Component.RabbitMQClientWebTester\BPA.Component.RabbitMQClientWebTester.csproj", "{0545F9FD-8302-440D-AF94-AD671F130479}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tester", "Tester", "{C09304A6-255C-4693-B704-8C1FBD57CF85}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Template", "Template", "{114E6F3D-9A66-47DF-AB8E-1BE6EC85213E}"
@@ -180,10 +178,6 @@ Global
{F81FDB53-2CCD-47EF-8766-7CBEF3EDEB8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F81FDB53-2CCD-47EF-8766-7CBEF3EDEB8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F81FDB53-2CCD-47EF-8766-7CBEF3EDEB8D}.Release|Any CPU.Build.0 = Release|Any CPU
{0545F9FD-8302-440D-AF94-AD671F130479}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0545F9FD-8302-440D-AF94-AD671F130479}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0545F9FD-8302-440D-AF94-AD671F130479}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0545F9FD-8302-440D-AF94-AD671F130479}.Release|Any CPU.Build.0 = Release|Any CPU
{F8581079-3BE5-47BB-93CA-AC20753157B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F8581079-3BE5-47BB-93CA-AC20753157B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F8581079-3BE5-47BB-93CA-AC20753157B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -215,7 +209,6 @@ Global
{9BB79240-0400-4843-BFD3-7C8EE316C0A4} = {C09304A6-255C-4693-B704-8C1FBD57CF85}
{38640EA1-3DBE-492A-96B3-AA3AC5EBC16B} = {C09304A6-255C-4693-B704-8C1FBD57CF85}
{BCCC8684-C155-4FC2-A648-1DD5E550B568} = {C09304A6-255C-4693-B704-8C1FBD57CF85}
{0545F9FD-8302-440D-AF94-AD671F130479} = {C09304A6-255C-4693-B704-8C1FBD57CF85}
{78463667-1A86-48ED-B459-0AE2C1CBC668} = {C09304A6-255C-4693-B704-8C1FBD57CF85}
{F8581079-3BE5-47BB-93CA-AC20753157B6} = {114E6F3D-9A66-47DF-AB8E-1BE6EC85213E}
{2B2DAA5B-0BD9-4DAD-A53E-1C52B7F14E0D} = {114E6F3D-9A66-47DF-AB8E-1BE6EC85213E}


Laden…
Abbrechen
Speichern