新增对RabbitMQ的测试项目
This commit is contained in:
parent
b0717c4522
commit
c574f2241e
|
@ -15,7 +15,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Falcon.SugarApi.WebService", "Falcon.SugarApi.WebService\Falcon.SugarApi.WebService.csproj", "{A02586C2-B485-47C3-988B-AC050BD2286C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Falcon.SugarApi.Windows", "Falcon.SugarApi.Windows\Falcon.SugarApi.Windows.csproj", "{68AF37DA-5B3E-4ADF-9054-CE5F42667625}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Falcon.SugarApi.Windows", "Falcon.SugarApi.Windows\Falcon.SugarApi.Windows.csproj", "{68AF37DA-5B3E-4ADF-9054-CE5F42667625}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RabbitMqTest", "RabbitMqTest\RabbitMqTest.csproj", "{7F308FE9-B5C5-45BA-B882-15B4B983C39C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -39,6 +41,10 @@ Global
|
|||
{68AF37DA-5B3E-4ADF-9054-CE5F42667625}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{68AF37DA-5B3E-4ADF-9054-CE5F42667625}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{68AF37DA-5B3E-4ADF-9054-CE5F42667625}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7F308FE9-B5C5-45BA-B882-15B4B983C39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7F308FE9-B5C5-45BA-B882-15B4B983C39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7F308FE9-B5C5-45BA-B882-15B4B983C39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7F308FE9-B5C5-45BA-B882-15B4B983C39C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
142
RabbitMqTest/OriginalTest.cs
Normal file
142
RabbitMqTest/OriginalTest.cs
Normal file
|
@ -0,0 +1,142 @@
|
|||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RabbitMQ.Client;
|
||||
using RabbitMQ.Client.Events;
|
||||
using System.Text;
|
||||
|
||||
namespace RabbitMqTest
|
||||
{
|
||||
[TestClass]
|
||||
public class OriginalTest:RabbitmqBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 轮训消息,一个生产者,多个消费者轮训接收。
|
||||
/// </summary>
|
||||
[TestMethod("轮训消息")]
|
||||
public void BaseTest() {
|
||||
var smsg1 = base.RandomString();
|
||||
var smsg2 = base.RandomString();
|
||||
var smsg3 = base.RandomString();
|
||||
//消费者1
|
||||
using var channel = GetChannel();
|
||||
channel.QueueDeclare("hello",false,false,false,null);
|
||||
var consumer = new EventingBasicConsumer(channel);
|
||||
consumer.Received+=(model,args) => {
|
||||
var msg = Encoding.UTF8.GetString(args.Body.ToArray());
|
||||
Console.WriteLine($"Received message 1 {msg}");
|
||||
//Assert.IsTrue(msg==smsg1 || msg==smsg2);
|
||||
|
||||
//手动回复Ack,如果非自动回复
|
||||
channel.BasicAck(args.DeliveryTag,false);
|
||||
};
|
||||
channel.BasicConsume("hello",false,consumer);
|
||||
|
||||
//消费者2
|
||||
using var channel2 = GetChannel();
|
||||
var consumer2 = new EventingBasicConsumer(channel2);
|
||||
consumer2.Received+=(model,args) => {
|
||||
var msg = Encoding.UTF8.GetString(args.Body.ToArray());
|
||||
Console.WriteLine($"Received message 2 {msg}");
|
||||
//Assert.IsTrue(msg==smsg1||msg==smsg2);
|
||||
|
||||
//手动回复Ack,如果非自动回复
|
||||
channel.BasicAck(args.DeliveryTag,false);
|
||||
};
|
||||
channel.BasicConsume("hello",false,consumer2);
|
||||
|
||||
//生产者
|
||||
using var channel1 = GetChannel();
|
||||
channel1.QueueDeclare("hello",false,false,false,null);
|
||||
channel.BasicPublish("","hello",null,Encoding.UTF8.GetBytes(smsg1));
|
||||
Console.WriteLine($"Send message 1 {smsg1}");
|
||||
channel.BasicPublish("","hello",null,Encoding.UTF8.GetBytes(smsg2));
|
||||
Console.WriteLine($"Send message 2 {smsg2}");
|
||||
channel.BasicPublish("","hello",null,Encoding.UTF8.GetBytes(smsg3));
|
||||
Console.WriteLine($"Send message 3 {smsg3}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 订阅发布模式。一个发布者多个订阅。消费者可以同时收到消息
|
||||
/// </summary>
|
||||
[TestMethod("订阅发布模式")]
|
||||
public void BaseTest2() {
|
||||
var exchangeName = RandomString();
|
||||
var smsg = RandomString();
|
||||
|
||||
//消费者1
|
||||
using var channel1 = GetChannel();
|
||||
//创建交换机
|
||||
channel1.ExchangeDeclare(exchangeName,ExchangeType.Fanout);
|
||||
//创建队列
|
||||
var queueName1 = channel1.QueueDeclare().QueueName;
|
||||
Console.WriteLine($"创建的临时队列名1:{queueName1}");
|
||||
channel1.QueueBind(queueName1,exchangeName,"",null);
|
||||
var consumer1 = new EventingBasicConsumer(channel1);
|
||||
consumer1.Received+=(m,a) => {
|
||||
var msgs = Encoding.UTF8.GetString(a.Body.ToArray());
|
||||
Console.WriteLine($"Received message 1 {msgs}");
|
||||
Assert.AreEqual(msgs,smsg);
|
||||
};
|
||||
channel1.BasicConsume(queueName1,true,consumer1);
|
||||
|
||||
//消费者2
|
||||
using var channel2 = GetChannel();
|
||||
//创建交换机
|
||||
channel2.ExchangeDeclare(exchangeName,ExchangeType.Fanout);
|
||||
//创建队列
|
||||
var queueName2 = channel2.QueueDeclare().QueueName;
|
||||
Console.WriteLine($"创建的临时队列名2:{queueName2}");
|
||||
channel2.QueueBind(queueName2,exchangeName,"",null);
|
||||
var consumer2 = new EventingBasicConsumer(channel2);
|
||||
consumer2.Received+=(m,a) => {
|
||||
var msgs = Encoding.UTF8.GetString(a.Body.ToArray());
|
||||
Console.WriteLine($"Received message 2 {msgs}");
|
||||
Assert.AreEqual(msgs,smsg);
|
||||
};
|
||||
channel2.BasicConsume(queueName2,true,consumer2);
|
||||
|
||||
//生产者
|
||||
using var channel3 = GetChannel();
|
||||
channel3.ExchangeDeclare(exchangeName,ExchangeType.Fanout);
|
||||
channel3.BasicPublish(exchangeName,"",null,Encoding.UTF8.GetBytes(smsg));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试生产者先发送消息,消费者后连接接收消息
|
||||
/// </summary>
|
||||
[TestMethod("先生产者后消费者")]
|
||||
public void BaseTest3() {
|
||||
var smsg = RandomString();
|
||||
//以下交换机和队列及其绑定配置需要提前在服务器上配置,否则取消相关注释自行创建
|
||||
var exchangeName = "logs";
|
||||
var queueName1 = "queueu1";
|
||||
var queueName2 = "queueu2";
|
||||
|
||||
//消费者1
|
||||
using var channel1 = GetChannel();
|
||||
var consumer1 = new EventingBasicConsumer(channel1);
|
||||
consumer1.Received+=(m,a) => {
|
||||
var msgs = Encoding.UTF8.GetString(a.Body.ToArray());
|
||||
Console.WriteLine($"Received message 1 {msgs}");
|
||||
Assert.AreEqual(msgs,smsg);
|
||||
};
|
||||
channel1.BasicConsume(queueName1,true,consumer1);
|
||||
|
||||
//生产者
|
||||
var produce = GetChannel();
|
||||
produce.BasicPublish(exchangeName,"",null,Encoding.UTF8.GetBytes(smsg));
|
||||
Console.WriteLine($"Send message {smsg}");
|
||||
|
||||
//消费者2
|
||||
using var channel2 = GetChannel();
|
||||
var consumer2 = new EventingBasicConsumer(channel2);
|
||||
consumer2.Received+=(m,a) => {
|
||||
var msgs = Encoding.UTF8.GetString(a.Body.ToArray());
|
||||
Console.WriteLine($"Received message 2 {msgs}");
|
||||
Assert.AreEqual(msgs,smsg);
|
||||
};
|
||||
channel2.BasicConsume(queueName2,true,consumer2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
8
RabbitMqTest/PageTest.html
Normal file
8
RabbitMqTest/PageTest.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<script src="stomp.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
16
RabbitMqTest/RabbitMqTest.csproj
Normal file
16
RabbitMqTest/RabbitMqTest.csproj
Normal file
|
@ -0,0 +1,16 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
|
||||
<PackageReference Include="RabbitMQ.Client" Version="6.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
52
RabbitMqTest/RabbitmqBase.cs
Normal file
52
RabbitMqTest/RabbitmqBase.cs
Normal file
|
@ -0,0 +1,52 @@
|
|||
using RabbitMQ.Client;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RabbitMqTest
|
||||
{
|
||||
public abstract class RabbitmqBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建通道
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual IModel GetChannel() {
|
||||
var factory = new ConnectionFactory { HostName="localhost" };
|
||||
var connection = factory.CreateConnection();
|
||||
return connection.CreateModel();
|
||||
}
|
||||
|
||||
private static string MessageChars = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>''""";
|
||||
/// <summary>
|
||||
/// 生成随机消息
|
||||
/// </summary>
|
||||
protected virtual string RandomString(int len = 10) {
|
||||
var random = new Random();
|
||||
int charslen = MessageChars.Length;
|
||||
StringBuilder sb = new(len);
|
||||
for(int i = 0;i<len;i++) {
|
||||
var ci = random.Next(0,charslen-1);
|
||||
sb.Append(MessageChars[ci]);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建队列
|
||||
/// </summary>
|
||||
protected virtual void QueueDeclare(IModel channel,string queueName) {
|
||||
channel.QueueDeclare(queueName,exclusive: false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建交换机
|
||||
/// </summary>
|
||||
protected virtual void ExchangeDeclare(IModel channel,string exchangeName) {
|
||||
channel.ExchangeDeclare(exchangeName,ExchangeType.Fanout,autoDelete: true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
8
RabbitMqTest/stomp.min.js
vendored
Normal file
8
RabbitMqTest/stomp.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user