前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用C#封装一个MQ测试工具

使用C#封装一个MQ测试工具

原创
作者头像
软件架构师Michael
修改2025-02-13 16:53:02
修改2025-02-13 16:53:02
640
举报

这个工具可以用于测试常见的MQ操作,例如发送消息、接收消息、查看队列状态等。我们将使用.NET的System.Messaging命名空间来操作本地或远程的消息队列。

1. 功能需求

  • 创建队列。
  • 删除队列。
  • 发送消息到队列。
  • 从队列接收消息。
  • 查看队列中的消息数量。
  • 清空队列。

2. 代码实现

我们将创建一个控制台应用程序来实现这些功能。以下是完整的代码:

代码语言:csharp
复制
using System;
using System.Messaging;

namespace MQTestTool
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("MQ Test Tool");
            Console.WriteLine("1. Create Queue");
            Console.WriteLine("2. Delete Queue");
            Console.WriteLine("3. Send Message");
            Console.WriteLine("4. Receive Message");
            Console.WriteLine("5. Get Queue Message Count");
            Console.WriteLine("6. Clear Queue");
            Console.WriteLine("0. Exit");

            while (true)
            {
                Console.Write("Enter your choice: ");
                if (!int.TryParse(Console.ReadLine(), out int choice))
                {
                    Console.WriteLine("Invalid input. Please try again.");
                    continue;
                }

                switch (choice)
                {
                    case 1:
                        CreateQueue();
                        break;
                    case 2:
                        DeleteQueue();
                        break;
                    case 3:
                        SendMessage();
                        break;
                    case 4:
                        ReceiveMessage();
                        break;
                    case 5:
                        GetMessageCount();
                        break;
                    case 6:
                        ClearQueue();
                        break;
                    case 0:
                        Console.WriteLine("Exiting...");
                        return;
                    default:
                        Console.WriteLine("Invalid choice. Please try again.");
                        break;
                }
            }
        }

        static void CreateQueue()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();

            if (!MessageQueue.Exists(queuePath))
            {
                MessageQueue.Create(queuePath);
                Console.WriteLine($"Queue created at {queuePath}");
            }
            else
            {
                Console.WriteLine("Queue already exists.");
            }
        }

        static void DeleteQueue()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();

            if (MessageQueue.Exists(queuePath))
            {
                MessageQueue.Delete(queuePath);
                Console.WriteLine($"Queue deleted at {queuePath}");
            }
            else
            {
                Console.WriteLine("Queue does not exist.");
            }
        }

        static void SendMessage()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();
            Console.Write("Enter Message: ");
            string message = Console.ReadLine();

            using (MessageQueue queue = new MessageQueue(queuePath))
            {
                queue.Send(message);
                Console.WriteLine("Message sent successfully.");
            }
        }

        static void ReceiveMessage()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();

            using (MessageQueue queue = new MessageQueue(queuePath))
            {
                if (queue.GetAllMessages().Length > 0)
                {
                    Message receivedMessage = queue.Receive();
                    Console.WriteLine($"Received Message: {receivedMessage.Body}");
                }
                else
                {
                    Console.WriteLine("No messages in the queue.");
                }
            }
        }

        static void GetMessageCount()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();

            using (MessageQueue queue = new MessageQueue(queuePath))
            {
                int messageCount = queue.GetAllMessages().Length;
                Console.WriteLine($"Message Count: {messageCount}");
            }
        }

        static void ClearQueue()
        {
            Console.Write("Enter Queue Path (e.g., .\\private$\\testQueue): ");
            string queuePath = Console.ReadLine();

            using (MessageQueue queue = new MessageQueue(queuePath))
            {
                queue.Purge();
                Console.WriteLine("Queue cleared successfully.");
            }
        }
    }
}

3. 功能说明

  1. 创建队列
    • 用户输入队列路径(例如.\\private$\\testQueue)。
    • 如果队列不存在,则创建队列。
  2. 删除队列
    • 用户输入队列路径。
    • 如果队列存在,则删除队列。
  3. 发送消息
    • 用户输入队列路径和消息内容。
    • 将消息发送到指定队列。
  4. 接收消息
    • 用户输入队列路径。
    • 从队列中接收并显示第一条消息。
  5. 获取队列消息数量
    • 用户输入队列路径。
    • 显示队列中的消息数量。
  6. 清空队列
    • 用户输入队列路径。
    • 清空队列中的所有消息。

4. 运行环境

  • 需要.NET Framework或.NET Core环境。
  • 确保系统已安装消息队列服务(MSMQ)。可以通过“控制面板”->“程序和功能”->“启用或关闭Windows功能”来启用。

5. 使用示例

运行程序后,用户可以通过控制台菜单选择操作,例如:

复制

代码语言:txt
复制
MQ Test Tool
1. Create Queue
2. Delete Queue
3. Send Message
4. Receive Message
5. Get Queue Message Count
6. Clear Queue
0. Exit
Enter your choice: 1
Enter Queue Path (e.g., .\private$\testQueue): .\private$\testQueue
Queue created at .\private$\testQueue

这个工具是一个简单的MQ测试工具,可以根据实际需求进一步扩展功能,例如支持持久化消息、支持远程队列等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 功能需求
  • 2. 代码实现
  • 3. 功能说明
  • 4. 运行环境
  • 5. 使用示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档