rabbitmq 消费端代码获取队列名称_RabbitMQ四:生产者--队列--消费者

AMQP协议的梳理和名词解析

建议先把上篇AMQP协议先看一遍,理解一下,由于用XMind绘图,电脑屏幕比较小,不能截取全部,如果想要全图和源代码,请下面留言.......

可以点击图片,打开到新的页面查看,文字会清晰一点。。。。。

实例一:生产者-队列-消费者

P(Producer):生产者,意味着发送;

Queue:队列,本质上是一个无限的缓冲区,可以储存尽可能多的信息;

C(Consumer):消费者,等待并接收消息。

代码

简述:三部分,创建连接对象的公共帮助类库,一个发布者,一个消费者

MQConnnection代码单独封装一个类库:::

public class HelpConnection

{

private static IConnection Connection;

public static IConnection GetConnection()

{

if (Connection == null)

{

//创建连接工厂

var factory = new ConnectionFactory()

{

//计算机名称,账号,密码,

HostName = "localhost",

UserName = "zhangguangpo",

Password = "guangpo1992",

RequestedHeartbeat = 60,

AutomaticRecoveryEnabled = true //要启用自动连接恢复

};

//创建连接

Connection = factory.CreateConnection();

return Connection;

}

return Connection;

}

}

发布者:::

///

///案例一::: 生产者--队列--消费者///

///

static void Main(string[] args)

{//创建一个渠道,会话

using (var channel =HelpConnection.GetConnection().CreateModel())

{//参数:队列名称,是否持久,是否独家,自动删除,参数//QueueDeclare(string queue,durable true,exclusive false,autoDelete false, IDictionary arguments);//声明一个队列

channel.QueueDeclare("hello", true, false, false, null);string message = "Hello World 1";var body =Encoding.UTF8.GetBytes(message);

channel.BasicPublish("", "hello", null, body);

Console.WriteLine("发布成功!!!");

Console.ReadKey();

}

}

消费者:::

(1)获取个人消息(“拉API”)要检索单个消息,请使用IModel.BasicGet。

static void Main(string[] args)

{using (var channel =HelpConnection.GetConnection().CreateModel())

{//参数:队列名称,是否持久,是否独家,自动删除,参数//QueueDeclare(string queue,durable true,exclusive false,autoDelete false, IDictionary arguments);//在消费者的类里面为什么会再次声明队列(channel.QueueDeclare())呢?-- 因为接收方可能会在发送方启动前启动,这是出于保险起见。

channel.QueueDeclare("hello", true, false, false, null);#region 获取个人消息(“拉API”)

//要检索单个消息,请使用IModel.BasicGet。返回的值是BasicGetResult的实例,可以从中提取头信息(属性)和消息体://noAck 可理解 是个消息标记,True:消息读取自动排除,下次不会读取到;false 消息没有排除,一直存在,

var result = channel.BasicGet("hello", True);if (result == null)

{

Console.WriteLine("暂时没有消息");

}else{var msg =Encoding.UTF8.GetString(result.Body);

Console.WriteLine(msg);

}//确认收到消息//channel.BasicAck(result.DeliveryTag, false);

#endregionConsole.ReadKey();

}

}

(2)通过订阅检索邮件(“推送API”)

static void Main(string[] args)

{using (var channel =HelpConnection.GetConnection().CreateModel())

{#region 通过订阅检索邮件(“推送API”)

//创建基于该队列的消费者,绑定事件//我们即将告诉服务器将队列中的消息传递给我们。由于它将异步地推送我们的邮件,所以我们提供一个回调。//那就是EventingBasicConsumer.Received事件处理程序。

var consumer = newEventingBasicConsumer(channel);string msg = "";

consumer.Received+= (model, e) =>{var body = e.Body; //消息主体

msg =Encoding.UTF8.GetString(e.Body);

Console.WriteLine("显示消息:" +msg);

};//启动消费者 必须调用 IModel.BasicAck来确认您已成功接收并处理该消息:

channel.BasicConsume(queue: "hello", //队列名

noAck: true, //false:手动应答;true:自动应答

consumer: consumer);#endregionConsole.ReadKey();

}

}

显示效果:一样一样的

博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!

小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值