RabbitMQ 笔记

1:发送

Uri uri = new Uri("amqp://10.0.4.85:5672/");

ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "abc";
factory.Password = "abcdef";
factory.VirtualHost = "dnt_mq";
factory.RequestedHeartbeat = 0;
factory.Endpoint = new AmqpTcpEndpoint(uri);

string exchange = "ex1";
string exchangeType = "direct";
string routingKey = "Q1";

using (IConnection conn = factory.CreateConnection())
{
using (IModel ch = conn.CreateModel())
{
if (exchangeType != null)
{
ch.ExchangeDeclare(exchange, exchangeType);//,true,true,false,false, true,null);
ch.QueueDeclare("MyFirstQueue", true, true, true, null);
ch.QueueBind("MyFirstQueue", exchange, routingKey);
}
string jsonStr = "abc";//JsonConvert.SerializeObject(requestMsg);
byte[] bytes = Encoding.UTF8.GetBytes(jsonStr);

IBasicProperties properties = ch.CreateBasicProperties();
properties.DeliveryMode = 2;

ch.BasicPublish(exchange, routingKey, properties, bytes);

/*
* channel.queueBind("queueName", "exchangeName", "routingKey.*");
* channel.basicPublish("exchangeName", "routingKey.one", properties, bytes);
*
* channel.exchangeDeclare("exchangeName", "fanout"); //direct fanout topic
* channel.basicPublish("exchangeName", "", properties, bytes);
* */
}
}

2 接收
try
{
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "";
factory.Port = 456;
factory.UserName = "";
factory.Password = "";
using (IConnection conn = factory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//在MQ上定义一个持久化队列,如果名称相同不会重复创建
channel.QueueDeclare("MyFirstQueue", true, false, false, null);

//输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
channel.BasicQos(0, 1, false);

Console.WriteLine("Listening...");

//在队列上定义一个消费者
QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
//消费队列,并设置应答模式为程序主动应答
channel.BasicConsume("MyFirstQueue", false, consumer);

while (true)
{
//阻塞函数,获取队列中的消息
BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
byte[] bytes = ea.Body;
string str = Encoding.UTF8.GetString(bytes);
//RequestMsg msg = JsonConvert.DeserializeObject<RequestMsg>(str);
Console.WriteLine("HandleMsg:" + "".ToString());
//回复确认
channel.BasicAck(ea.DeliveryTag, false);
}
}
}
}
catch (Exception e1)
{
Console.WriteLine(e1.ToString());
}
Console.ReadLine();

}

时间: 2024-08-05 04:04:55

RabbitMQ 笔记的相关文章

RabbitMQ 笔记一

ConnectionFactory.Connection.Channel ConnectionFactory.Connection.Channel,这三个都是RabbitMQ对外提供的API中最基本的对象.不管是服务器端还是客户端都会首先创建这三类对象.       ConnectionFactory为Connection的制造工厂. Connection是与RabbitMQ服务器的socket链接,它封装了socket协议及身份验证相关部分逻辑. Channel是我们与RabbitMQ打交道的

RabbitMQ笔记

RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用

RabbitMQ 笔记-工作队列

工作队列的主要思想是不用等待资源密集型的任务处理完成, 为了确保消息或者任务不会丢失,rabbitmq 支持消息确信 ACK.ACK机制是消费者端从rabbitmq收到消息并处理完成后,反馈给rabbitmq,rabbitmq收到反馈信息后将消息从队列中删除 如果rabbitmq向消费者改善消息时,消费者服务器挂了,消息也不会超时,即使一个消息需要非常长的时间处理,也不会导致消息超时,永远不会从rabbitmq中删除, 忘记通过basicAck返回确认信息是个严重的错误 rabbitmq不允许重

RabbitMQ 笔记-Exchanges

Procuder Publish的Message进入了Exchange.接着通过"routing keys", RabbitMQ会找到应该把这个Message放到哪个queue里.queue也是通过这个routing keys来做的绑定. 有三种类型的Exchanges:direct, fanout,topic. 每个实现了不同的路由算法(routing algorithm). Direct exchange: 如果 routing key 匹配, 那么Message就会被传递到相应的

网络编程之异步IO,rabbitMQ笔记

对于网络并发编程而言,多线程与多进程算是最常见的需求场景了.毕竟网站开放就是想要更多的流量访问的. 回顾 回顾下之前学过的关于线程,进程和协程的知识点 IO密集型任务--用多线程更好计算密集型任务--用多进程更好 线程概念:计算机中工作的最小单元  进程:默认有主线程,可以有多线程共存,并共享内存资源.  协程:使用进程中的一个线程去做多个任务,微线程pypy  GIL:全局解释器锁,python特有,用于在进程中对所有线程加锁,保证同时只能有一个线程被CPU调度 一句话说明什么是协程:协程是一

RabbitMQ 学习开发笔记

ConnectionFactory.Connection.Channel ConnectionFactory.Connection.Channel,这三个都是RabbitMQ对外提供的API中最基本的对象.不管是服务器端还是客户端都会首先创建这三类对象.       ConnectionFactory为Connection的制造工厂. Connection是与RabbitMQ服务器的socket链接,它封装了socket协议及身份验证相关部分逻辑. Channel是我们与RabbitMQ打交道的

python采用pika库使用rabbitmq总结,多篇笔记和示例(转)

add by zhj:作者的几篇文章参考了Rabbitmq的Tutorials中的几篇文章. 原文:http://www.01happy.com/python-pika-rabbitmq-summary/ 这一段时间学习了下rabbitmq,在学习的过程中,发现国内关于python采用pika库使用rabbitmq的资料很少,官网有这方面的资料,不过是都英文的.于是笔者结合自己的理解,就这方面内容写了一些示例,总共有七篇笔记,分享出来. 笔记依次是循序渐进的,笔记内贴出的代码笔者都实际运行过,运

RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java实现RabbitMQ之与Spring集成 最后面有下载地址,只是做了少许改变,改变的代码如下: 消费者 spring-config.xml(还需要增加一个QueueListener监听器,代码就不复制到这里了,可以参考项目中的其他监听器) <!-- =========================

RabbitMQ安装笔记

RabbitMQ安装笔记 安装Erlang 在安装RabbitMQ之前,需要先安装Erlang.可以通过以下命令安装: yum install erlang 安装时信息如下: 安装RabbitMQ 服务端 安装命令如下: wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.2/rabbitmq-server-3.4.2-1.noarch.rpm rpm -Uvh rabbitmq_server-3.4.2-1.noarch.rpm