第一个例子-生产者发送消息

下面来展示简单的RabbitMQ的使用

我们用我们第五节中创建的控制台项目

作为生产者客户端

这个程序作为Producer生产者,用来发送数据:

using RabbitMQ.Client;

static void Main(string[] args)
{
    var factory = new ConnectionFactory();
    factory.HostName = "localhost";//RabbitMQ服务在本地运行
    factory.UserName = "guest";//用户名
    factory.Password = "guest";//密码

    using (var connection = factory.CreateConnection())
    {
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare("hello", false, false, false, null);//创建一个名称为hello的消息队列
            string message = "Hello World"; //传递的消息内容
            var body = Encoding.UTF8.GetBytes(message);
            channel.BasicPublish("", "hello", null, body); //开始传递
            Console.WriteLine("已发送: {0}", message);
            Console.ReadLine();
        }
    }
}Code language: JavaScript (javascript)

现在当我们运行项目

此时,名为hello的消息队列中,发送了一条消息。这条消息存储到了RabbitMQ的服务器上。使用rabbitmqctl 的list_queues可以查看所有的消息队列,以及里面的消息个数。可以看到,目前RabbitMQ上只有一个消息队列,里面只有一条消息:

也可以在web管理界面查看此queue的相关信息:

看另外一个例子

//第一步:创建连接connection
using (var connection = factory.CreateConnection())
{
    //第二步:创建通道channel
    using (var channel = connection.CreateModel())
    {
        //第三步:声明交换机exchange
        channel.ExchangeDeclare(exchange: "myexchange",
                                type: ExchangeType.Direct,
                                durable: true,
                                autoDelete: false,
                                arguments: null);
        //第四步:声明队列queue
        channel.QueueDeclare(queue: "myqueue",
                             durable: true,
                             exclusive: false,
                             autoDelete: false,
                             arguments: null);
        Console.WriteLine("生产者准备就绪....");
        //第五步:绑定队列到交换机
        channel.QueueBind(queue: "myqueue", exchange: "myexchange", routingKey: "mykey");
        string message = "";
        //第六步:发送消息
        //在控制台输入消息,按enter键发送消息
        while (!message.Equals("quit", StringComparison.CurrentCultureIgnoreCase))
        {
            message = Console.ReadLine();
            var body = Encoding.UTF8.GetBytes(message);
            //基本发布
            channel.BasicPublish(exchange: "myexchange",
                                 routingKey: "mykey",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine($"消息【{message}】已发送到队列");
        }
    }
}
Console.ReadKey();Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注