`
gaoyangang
  • 浏览: 19242 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C#下实现RabbitMQ。

阅读更多

1.首先需要下载.net下的驱动类。rabbitmq.client.dll.安装后可以使用提供的文档。当然也可以直接从别的地方只下载rabbitmq.client.dll使用。

下载地址:http://www.rabbitmq.com/dotnet.html

 文档和安装程序都有了。

2.然后建立项目导入引用

         一、首先建立一个消息的发送者类Sender

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client.Content;
using System.Collections;

namespace Sender
{

    /// <summary>
    /// 向队列中写入一个消息
    /// </summary>
    public class ProduceMQ
    {
          static void Main(string[] args)
       
        {
           //服务器所在的主机ip
            Uri uri = new Uri("amqp://192.168.1.99:8688/");
            string exchange = "routing";//路由
            string exchangeType = "direct";//交换模式
            string routingKey = "rk";//路由关键字
            //是否对消息队列持久化保存
            bool persistMode = true;
            ConnectionFactory cf = new ConnectionFactory();

            cf.UserName = "gyg";//某个vhost下的用户
            cf.Password = "123456";
            cf.VirtualHost = "gyg001";//vhost
            cf.RequestedHeartbeat = 0;
            cf.Endpoint = new AmqpTcpEndpoint(uri);
                            //创建一个连接到具体总结点的连接
           using (IConnection conn = cf.CreateConnection())
            {             //创建并返回一个新连接到具体节点的通道
                using (IModel ch = conn.CreateModel())
                {
                    if (exchangeType != null)
                    {//声明一个路由
                        ch.ExchangeDeclare(exchange, exchangeType);
                       //声明一个队列
                        ch.QueueDeclare("q", true, false, false, null);
                      //将一个队列和一个路由绑定起来。并制定路由关键字  
                      ch.QueueBind("q1", exchange, routingKey);
                    }
                    ///构造消息实体对象并发布到消息队列上
                    IMapMessageBuilder b = new MapMessageBuilder(ch);
                    IDictionary target = b.Headers;
                    target["header"] = "hello world";
                    IDictionary targerBody = b.Body;
                    targerBody["body"] = "hello world";//这个才是具体的发送内容
                    if (persistMode)
                    {
                        ((IBasicProperties)b.GetContentHeader()).DeliveryMode = 2;
                               //设定传输模式
                    }
                    //写入
                    ch.BasicPublish(exchange, routingKey, (IBasicProperties)b.GetContentHeader(), b.GetContentBody());
                    Console.WriteLine("写入成功");
                }

            }
        }


    }
}

 二、创建一个接受者:receiver

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Util;

namespace receiver
{
    public class receiver
    {
        static void Main(string[] args)
        {
           // Uri uri = new Uri("amqp://127.0.0.1:8688/");
            
            string exchange = "routing";
            string exchangeType = "direct";
            string routingKey = "rk";

            string serverAddress ="amqp://127.0.0.1:8688/";

            ConnectionFactory cf = new ConnectionFactory();
            cf.Uri =  serverAddress;
            
            cf.UserName = "gyg";
            cf.Password = "123456";
            cf.VirtualHost = "gyg001";
            cf.RequestedHeartbeat = 0;
            //cf.Endpoint = new AmqpTcpEndpoint(uri);
            using (IConnection conn = cf.CreateConnection())
            {
                using (IModel ch = conn.CreateModel())
                {
                    //普通使用方式BasicGet
                    //noAck = true,不需要回复,接收到消息后,queue上的消息就会清除
                    //noAck = false,需要回复,接收到消息后,queue上的消息不会被清除,
                    //直到调用channel.basicAck(deliveryTag, false); 
                    //queue上的消息才会被清除 而且,在当前连接断开以前,其它客户端将不能收到此queue上的消息

                    BasicGetResult res = ch.BasicGet("q", false/*noAck*/);
                        if (res!= null)
                        {
                            Console.WriteLine(System.Text.UTF8Encoding.UTF8.GetString(res.Body));
                            ch.BasicAck(res.DeliveryTag, false);

                        }
                        else
                        {
                            Console.WriteLine("无内容!!");
                        }
                        ch.Close(); 
                    }
                conn.Close();
                
                    
                }

            Console.ReadLine();
            }
        }
    
}

 当然了这种方式是最简单的每次发送一个。接受者每次取得一个。

注意:这种方式发送者和接受者不能同时访问服务器。

 

  • 大小: 18.8 KB
分享到:
评论

相关推荐

    C#开发的RabbitMQ主题订阅模式,读取mysql 数据发送和解析一体

    C#开发的RabbitMQ主题订阅模式,读取mysql 数据发送和解析一体。 使用vs2019开发的,可以运行使用,在根据自己的需求加工即可,已经实现了定时读取mysql数据库数据转为json发送,消费者接受后解析的应用。可以自行...

    C#调用RabbitMQ实现消息队列.zip

    C#调用RabbitMQ消息队列的实现例子,包括的内容: 1、C#调用RabbitMQ--控制台程序模式--发送端 2、C#调用RabbitMQ--控制台程序模式--接收端 3、C# Winform 调用RabbitMQ--接收端

    C#开发的RabbitMQ队列模式

    C#开发的RabbitMQ队列模式,分为生产者和消费者两个程序,使用vs2019开发的,可以运行使用,在根据自己的需求加工即可,另外在本人另外的资源还提供主题订阅模式的,已经实现了定时读取mysql数据库数据转为json发送...

    C# RabbitMQ Helper 帮助类

    1. **易用性**:C# RabbitMQ Helper通过封装RabbitMQ的基本操作,如连接、创建通道、声明交换机、队列等,使开发者能够更快速地实现消息队列功能。 2. **连接管理**:该帮助类提供了便捷的连接工厂,能够自动管理和...

    C#的Demo项目:RabbitMQ封装和使用

    总结起来,这个C# Demo项目旨在教会我们如何在.NET环境中使用RabbitMQ进行消息传递,通过封装RabbitMQ.Client库,我们可以更高效地利用交换机功能,实现不同场景下的消息路由。通过学习这个项目,开发者能够更好地...

    【C#】RabbitMQ实例

    总之,RabbitMQ是C#开发中非常强大的消息中间件,它可以提供可靠、高效的消息传递服务,帮助开发者实现高可用性和可扩展性的系统设计。通过学习和实践,你可以充分利用RabbitMQ的特性,解决实际项目中的各种挑战。

    RabbitMQ消息的发送和接收C#

    ch.ExchangeDeclare(exchange, exchangeType);//direct必须要routingKey //声明一个队列 ch.QueueDeclare("q", true, false, false, null); //将一个队列和一个路由绑定起来。并制定路由关键字 ...

    C# RabbitMQ 主题订阅的源码

    在本文中,我们将深入探讨C#中RabbitMQ的主题订阅模式及其源码实现。RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中的异步任务处理和...

    Release_rabbitmq_C#源码_

    标题中的"Release_rabbitmq_C#源码_"表明这是一个关于RabbitMQ的C#源代码发布版本,可能包含了实现RabbitMQ在C#环境中使用的示例或者库。RabbitMQ是一个开源的消息代理和队列服务器,广泛应用于分布式系统中,用于...

    通过WebSocket实现RabbitMQ的发送数据实时显示

    本主题聚焦于如何利用WebSocket技术与RabbitMQ结合,实现实时消息传递并将其展示在Web页面上。WebSocket是一种在客户端和服务器之间建立长连接的协议,允许双向通信,而RabbitMQ则是一个强大的开源消息代理,它使用...

    RabbitMQ消费者C#源码

    在C#环境下,我们可以使用RabbitMQ的.NET客户端来与RabbitMQ服务器进行交互,包括创建生产者和消费者。 本资源提供的“RabbitMQ消费者C#源码”是一个简单的控制台应用程序,用于接收由RabbitMQ生产者发送的消息。这...

    C#后台RabbitMQ Demo

    **C#后台RabbitMQ Demo** 是一个针对.NET开发者的学习资源,旨在教授如何在C#环境中使用RabbitMQ实现消息队列的基本功能。RabbitMQ是一个开源的消息代理和队列服务器,广泛应用于分布式系统中,用于解耦生产和消费...

    rabbitMQ封装c#

    本篇将详细讲解如何在C#中对RabbitMQ进行封装,以实现高效的连接管理和资源优化。 首先,理解RabbitMQ的基本概念是至关重要的。消息队列是RabbitMQ的核心,它们存储和转发消息。生产者是发送消息到队列的组件,而...

    C#RabbitMQ示例

    本示例将聚焦于如何使用C#语言与RabbitMQ进行集成,以实现服务器的连接和基本的发送与接收消息功能。 首先,我们要了解RabbitMQ的基本概念。RabbitMQ基于AMQP(Advanced Message Queuing Protocol)协议,它提供了...

    Windows 下 安装RabbitMQ C# 实现基本发送消息操作

    在Windows环境下,安装和使用RabbitMQ以及C#进行消息队列操作是现代软件开发中的常见任务,尤其在分布式系统和微服务架构中。RabbitMQ是一个开源的消息代理,它支持多种消息协议,包括AMQP(Advanced Message ...

    C#版本高性能RabbitMQ帮助类

    本篇将详细介绍C#版本下如何构建高性能的RabbitMQ帮助类,以便更好地利用这一强大的工具。 首先,我们需要理解RabbitMQ的基本概念。RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)协议的消息代理,...

    rabbitmq 实现消息插队

    本篇文章将深入探讨如何使用RabbitMQ实现消息插队,以"多人投资"为例,重点讲解手动投资与自动投资的消息处理流程。 首先,我们需要理解RabbitMQ的基本概念。在RabbitMQ中,生产者(Producer)负责发布消息,消费者...

    RabbitMQ实现抢购秒杀服务

    总结起来,RabbitMQ在抢购秒杀服务中的应用主要是通过消息队列实现请求的异步处理,减轻了数据库的压力,提高了系统在高并发情况下的响应速度和稳定性。同时,通过合理的消息确认机制和并发控制策略,还能保证数据的...

    C#调用RabbitMQ实现消息队列的示例代码

    C#调用RabbitMQ实现消息队列的示例代码 C#调用RabbitMQ实现消息队列的示例代码是指通过C#语言调用RabbitMQ实现消息队列的示例代码。本文将详细介绍C#调用RabbitMQ实现消息队列的示例代码,并对其进行详细的解释。 ...

    RabbitMQ一个简单可靠的方案(.NET Core实现)

    在.NET Core中,使用RabbitMQ可以实现可靠的消息传递,提升系统的可扩展性和容错性。通过定义交换机、队列和路由键,我们可以灵活控制消息的路由和处理。结合Web API,RabbitMQ可以作为一个强大的中间件,帮助我们...

Global site tag (gtag.js) - Google Analytics