RabbitMq 安装和 Hello World--.Net
2015-09-22 14:54
253 查看
RabbitMq 对比MSMQ
环境 win10 64位系统
首先 下载 rabbitMq 服务器安装包RabbitMq3.5.4官方下载.
如果你有早期版本的Erlang环境 ,要先卸载掉,然后再安装最新Erlang 虚拟机
先安装完 Erlang 环境后 再安装刚下载到的 RabbitMq 3.5.4
下载 RabbitMq 的.net 类库 有兴趣也可以下载源码阅读
创建Send 项目 代码如下
[csharp] view
plaincopyprint?
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.HostName = "127.0.0.1";
var conn = factory.CreateConnection();
var channel = conn.CreateModel();
channel.ExchangeDeclare("exchange", ExchangeType.Direct);
channel.QueueDeclare("myRabbit", false, false, false, null);
channel.QueueBind("myRabbit", "exchange", "123", null);
byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Hello World!!");
channel.BasicPublish("exchange", "123", null, messageBodyBytes);
}
创建接收项目,代码如下
[csharp] view
plaincopyprint?
var factory = new ConnectionFactory();
//用户名
factory.UserName = "guest";
//密码
factory.Password = "guest";
//此连接访问的虚拟主机
factory.VirtualHost = "/";
//主机名
factory.HostName = "127.0.0.1";
//创建连接
using (IConnection conn = factory.CreateConnection())
{<pre name="code" class="csharp"> //创建通道
using (IModel channel = conn.CreateModel()) { //普通接收消息(主动请求) bool noAck = false; BasicGetResult result = channel.BasicGet("myRabbit", noAck); if (result == null) { // No message available at
this time. Console.WriteLine("没有"); } else { IBasicProperties props = result.BasicProperties; byte[] body = result.Body; var str = Encoding.UTF8.GetString(body); Console.WriteLine(str); channel.BasicAck(result.DeliveryTag, false); } } } Console.ReadKey();
}
接收方 可以使用简单的 主动读取消息来处理. 也可以使用订阅的方式来自动获取到消息,代码如下
[csharp] view
plaincopyprint?
private static void Main(string[] args)
{
var factory = new ConnectionFactory();
//用户名
factory.UserName = "guest";
//密码
factory.Password = "guest";
//此连接访问的虚拟主机
factory.VirtualHost = "/";
//主机名
factory.HostName = "127.0.0.1";
//创建连接
//创建通道
using (IConnection conn = factory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//普通接收消息(主动请求)
//bool noAck = false;
//BasicGetResult result = channel.BasicGet("myRabbit", noAck);
//if (result == null)
//{
// // No message available at this time.
// Console.WriteLine("没有");
//}
//else
//{
// IBasicProperties props = result.BasicProperties;
// byte[] body = result.Body;
// var str = Encoding.UTF8.GetString(body);
// Console.WriteLine(str);
// channel.BasicAck(result.DeliveryTag, false);
//}
//订阅模式 (有消息到达将被自动接收) 消费者
var consumer = new EventingBasicConsumer(channel);
//注册接收事件
consumer.Received += (ch, ea) =>
{
var body = ea.Body;
var str = Encoding.UTF8.GetString(body);
Console.WriteLine(str);
//((EventingBasicConsumer)ch).Model.BasicAck(ea.DeliveryTag, false);
};
//要释放的资源
String consumerTag = channel.BasicConsume("myRabbit", false, consumer);
//当不希望继续订阅时,取消订阅(消费者)
//channel.BasicCancel(consumerTag);
Console.ReadKey();
}
}
}
安装和 Hello world 搞定
连接(Connection),与RabbitMQ Server建立的一个连接,由ConnectionFactory创建,每个connection只与一个物理的Server进行连接,此连接是基于Socket进行连接的,AMQP一般使用TCP链接来保证消息传输的可靠性
通道 (Channel),在C#客户端里应该是叫Model,其他客户端基本都叫Channel。建立在Connection基础上的一个通道,相对于Connection来说,它是轻量级的。它就像是Hibernate里面的Session一样。Channel 主要进行相关定义,发送消息,获取消息,事务处理等。Channel可以在多线程中使用,但是在必须保证任何时候只有一个线程执行命令。一个Connection可以有多个Channel。客户端程序有时候会是一个多线程程序,每一个线程都想要和RabbitMQ进行连接,但是又不想共享一个连接,这种需求还是比较普遍的。因为一个Connection就是一个TCP链接,RabbitMQ在设计的时候不希望与每一个客户端保持多个TCP连接,但这确实是有些客户端的需求,所以在设计中引入了Channel的概念,每一个Channel之间没有任何联系,是完全分离的。多个Channel来共享一个Connection。
交换器(Exchange),是发送消息的实体
队列(Queue),这是接收消息的实体
绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息
环境 win10 64位系统
首先 下载 rabbitMq 服务器安装包RabbitMq3.5.4官方下载.
如果你有早期版本的Erlang环境 ,要先卸载掉,然后再安装最新Erlang 虚拟机
先安装完 Erlang 环境后 再安装刚下载到的 RabbitMq 3.5.4
下载 RabbitMq 的.net 类库 有兴趣也可以下载源码阅读
创建Send 项目 代码如下
[csharp] view
plaincopyprint?
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.HostName = "127.0.0.1";
var conn = factory.CreateConnection();
var channel = conn.CreateModel();
channel.ExchangeDeclare("exchange", ExchangeType.Direct);
channel.QueueDeclare("myRabbit", false, false, false, null);
channel.QueueBind("myRabbit", "exchange", "123", null);
byte[] messageBodyBytes = Encoding.UTF8.GetBytes("Hello World!!");
channel.BasicPublish("exchange", "123", null, messageBodyBytes);
}
创建接收项目,代码如下
[csharp] view
plaincopyprint?
var factory = new ConnectionFactory();
//用户名
factory.UserName = "guest";
//密码
factory.Password = "guest";
//此连接访问的虚拟主机
factory.VirtualHost = "/";
//主机名
factory.HostName = "127.0.0.1";
//创建连接
using (IConnection conn = factory.CreateConnection())
{<pre name="code" class="csharp"> //创建通道
using (IModel channel = conn.CreateModel()) { //普通接收消息(主动请求) bool noAck = false; BasicGetResult result = channel.BasicGet("myRabbit", noAck); if (result == null) { // No message available at
this time. Console.WriteLine("没有"); } else { IBasicProperties props = result.BasicProperties; byte[] body = result.Body; var str = Encoding.UTF8.GetString(body); Console.WriteLine(str); channel.BasicAck(result.DeliveryTag, false); } } } Console.ReadKey();
}
接收方 可以使用简单的 主动读取消息来处理. 也可以使用订阅的方式来自动获取到消息,代码如下
[csharp] view
plaincopyprint?
private static void Main(string[] args)
{
var factory = new ConnectionFactory();
//用户名
factory.UserName = "guest";
//密码
factory.Password = "guest";
//此连接访问的虚拟主机
factory.VirtualHost = "/";
//主机名
factory.HostName = "127.0.0.1";
//创建连接
//创建通道
using (IConnection conn = factory.CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//普通接收消息(主动请求)
//bool noAck = false;
//BasicGetResult result = channel.BasicGet("myRabbit", noAck);
//if (result == null)
//{
// // No message available at this time.
// Console.WriteLine("没有");
//}
//else
//{
// IBasicProperties props = result.BasicProperties;
// byte[] body = result.Body;
// var str = Encoding.UTF8.GetString(body);
// Console.WriteLine(str);
// channel.BasicAck(result.DeliveryTag, false);
//}
//订阅模式 (有消息到达将被自动接收) 消费者
var consumer = new EventingBasicConsumer(channel);
//注册接收事件
consumer.Received += (ch, ea) =>
{
var body = ea.Body;
var str = Encoding.UTF8.GetString(body);
Console.WriteLine(str);
//((EventingBasicConsumer)ch).Model.BasicAck(ea.DeliveryTag, false);
};
//要释放的资源
String consumerTag = channel.BasicConsume("myRabbit", false, consumer);
//当不希望继续订阅时,取消订阅(消费者)
//channel.BasicCancel(consumerTag);
Console.ReadKey();
}
}
}
安装和 Hello world 搞定
连接(Connection),与RabbitMQ Server建立的一个连接,由ConnectionFactory创建,每个connection只与一个物理的Server进行连接,此连接是基于Socket进行连接的,AMQP一般使用TCP链接来保证消息传输的可靠性
通道 (Channel),在C#客户端里应该是叫Model,其他客户端基本都叫Channel。建立在Connection基础上的一个通道,相对于Connection来说,它是轻量级的。它就像是Hibernate里面的Session一样。Channel 主要进行相关定义,发送消息,获取消息,事务处理等。Channel可以在多线程中使用,但是在必须保证任何时候只有一个线程执行命令。一个Connection可以有多个Channel。客户端程序有时候会是一个多线程程序,每一个线程都想要和RabbitMQ进行连接,但是又不想共享一个连接,这种需求还是比较普遍的。因为一个Connection就是一个TCP链接,RabbitMQ在设计的时候不希望与每一个客户端保持多个TCP连接,但这确实是有些客户端的需求,所以在设计中引入了Channel的概念,每一个Channel之间没有任何联系,是完全分离的。多个Channel来共享一个Connection。
交换器(Exchange),是发送消息的实体
队列(Queue),这是接收消息的实体
绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息
相关文章推荐
- 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- HDFs数据读取过程
- MFC写COM组件
- Spring常用annotation标签
- DWR3 搭建(转载)
- PAM 的应用开发和内部实现源码分析
- SpriteBuilder中物理对象能否被缩放
- SpriteBuilder中物理对象能否被缩放
- git bash 操作 从github上pull代码再从客户端push上去
- 友盟的必要处
- TCP/IP数据包结构详解
- VirtualBox里的Fedora,增加磁盘大小
- HiWork发布1.7.0新版本——可开启频道公开链接,增加HiWork客服功能及集成应用麦客
- Kth Smallest Element in a BST 寻找二叉排序树中第k小元素
- SpriteBuilder中物理对象能否被缩放
- PHP Framework - ThinkPHP
- shell脚本编程-计算方式
- 例子:动态生成下拉菜单,在对应的文本域显示选择内容
- 利用facebook pop进行数字的动画显示。
- 树莓派的gpio python使用