RabbitMQ框架学写笔记-20161201
1.RabbitMQ NUget .Net客户端4.1.1版本 对应的 .netframework版本是 4.5.1 以及以上

2.本地实现的效果图

3.实践代码:
P-生产者:
using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace RabbitMQClient
{
/// <summary>
/// RabbitMQ的Topic
/// </summary>
class Program
{ private readonly static ConnectionFactory rabbitMqFactory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "---",
Password = "",
Port =
}; /// <summary>
/// 路由名称
/// </summary>
const string TopExchangeName = "topic.justin.exchange"; const string TopQueueName = "topic.justin.queue"; public static void TopicExchangeSendMsg()
{
using(IConnection conn=rabbitMqFactory.CreateConnection())
{
using(IModel channel = conn.CreateModel())
{
channel.ExchangeDeclare(TopExchangeName,"topic",durable:true,autoDelete:false,arguments:null);
channel.QueueDeclare(TopQueueName,durable:true,autoDelete:false,exclusive:false,arguments:null);
channel.QueueBind(TopQueueName,TopExchangeName,routingKey:TopQueueName);
Console.WriteLine("请输入要发送的消息!");
string vadata = Console.ReadLine();
while(vadata!="exit")
{
var msgBody = Encoding.UTF8.GetBytes(vadata);
channel.BasicPublish(exchange:TopExchangeName,routingKey:TopQueueName,basicProperties:null,body:msgBody);
Console.WriteLine(string.Format("**发送时间:{0},发送完成,输入exit退出消息发送",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
vadata = Console.ReadLine();
}
}
}
} static void Main(string[] args)
{
TopicExchangeSendMsg();
}
}
}
C-消费者代码:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace RabbitMQClient_C
{
/// <summary>
/// Customer接受消息代码
/// </summary>
class Program
{
private readonly static ConnectionFactory rabbitMqFactory = new ConnectionFactory()
{
HostName="127.0.0.1", UserName="---",Password="",Port=
}; /// <summary>
/// 路由名称
/// </summary>
const string TopExchangeName = "topic.justin.exchange"; /// <summary>
/// 队列名称
/// </summary>
const string TopQueueName = "topic.justin.queue"; public static void TopicAcceptExchange()
{
using(IConnection conn = rabbitMqFactory.CreateConnection())
{
using(IModel channel = conn.CreateModel())
{
channel.ExchangeDeclare(TopExchangeName,"topic",durable:true,autoDelete:false,arguments:null);
channel.QueueDeclare(TopQueueName,durable:true,autoDelete:false,exclusive:false,arguments:null);
channel.BasicQos(prefetchSize:,prefetchCount:,global:false);//作用:
channel.QueueBind(TopQueueName,TopExchangeName,routingKey:TopQueueName);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var msgBody = Encoding.UTF8.GetString(ea.Body);
Console.WriteLine(string.Format("**接收时间:{0},消息内容:{1}",
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
int dots = msgBody.Split('.').Length -;
System.Threading.Thread.Sleep(dots*);
Console.WriteLine(" [x] Done");
channel.BasicAck(deliveryTag:ea.DeliveryTag,multiple:false);
};
channel.BasicConsume(TopQueueName,noAck:false,consumer:consumer); Console.WriteLine("按任意键,退出程序");
Console.ReadLine();
}
}
} static void Main(string[] args)
{
TopicAcceptExchange();
}
}
}
RabbitMQ框架学写笔记-20161201的更多相关文章
- RabbitMQ框架学写笔记-20161130
- springMVC中ModelAndView学写笔记
api介绍: 构造函数摘要 ModelAndView() bean样式用法的默认构造函数:填充bean属性,而不是传递构造函数参数. ModelAndView(Object vie ...
- Mina框架的学习笔记——Android客户端的实现
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- 跟我一起学写jQuery插件开发方法(转载)
jQuery如此流行,各式各样的jQuery插件也是满天飞.你有没有想过把自己的一些常用的JS功能也写成jQuery插件呢?如果你的答案是肯定的,那么来吧!和我一起学写jQuery插件吧! 很 ...
- RabbitMQ框架构建系列(一)——AMPQ协议
一.MQ 在介绍RabbitMq之前,先来说一下MQ.什么是MQ?MQ全称为Message Queue即消息队列,就是一个消息的容器, MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入 ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- canvas知识03:学写一个字案例
效果
- 一点一点学写Makefile-1
相信很多Linux开发者 都得自己来写Makefile,刚开始学习学写这个的时候都会碰到很多困难,我之前没有自己独立完成过Makefile,都是在公司已有的模板上添加.现在突然有一个很大的想法就是从零 ...
随机推荐
- 使用CSS使内容垂直居中的N中方法。
使用css+div使页面内容水平居中的方法大家并不陌生,那么如何使内容垂直居中呢? OK,下面进入正题,不如我们使用做高中数学题时经常用的思想:分情况讨论. 1.当待垂直居中的DIV高宽为已知时: ...
- 用chrome来映射查找样式对应的sass
较新版本的sass(3.3+)支持source-map功能,可以配合谷歌浏览器或者livestyle来映射查找对应的样式. 要生成source-map可以在grunt中使用 grunt-contrib ...
- MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段
WordCount是一个入门的MapReduce程序(从src\examples\org\apache\hadoop\examples粘贴过来的): package org.apache.hadoop ...
- I/O重定向的原理和实现
在Unix系统中,每个进程都有STDIN.STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式.几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符 ...
- SharedPreferences.Editor 的apply()与commit()方法的区别
commit()的文档 官方文档如下: Commit your preferences changes back from this Editor to the SharedPreferences o ...
- Atitit View事件分发机制
1. Atitit View事件分发机制 1. Atitit View事件分发机制1 1.1. 三个关键方法 dispatchTouchEvent onInterceptTouchEvent onTo ...
- fir.im Weekly - 暖心的 iOS 持续集成,你值得拥有
一则利好消息,flow.ci 支持 iOS 项目持续集成,想试试的伙伴去 Gitter群 问问.首批尝鲜用户@阿米amoy 已经用 flow.ci 实现了基本的 iOS 持续集成,并详细记录整个 Bu ...
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
转载博客:http://blog.csdn.net/xiaanming/article/details/26810303 大家好!差不多两个来月没有写文章了,前段时间也是在忙换工作的事,准备笔试面试什 ...
- Ruby之基础介绍(二)
前言 上一篇我们简单介绍了下Ruby,这一节我们开始正式步入Ruby的世界,一探究竟. Ruby特点 (1)面向对象支持. (2)动态语言:我们可以修改已经定义过的类,也可以为现有类添加实例方法. ( ...
- Util应用程序框架公共操作类(一):数据类型转换公共操作类(介绍篇)
本系列文章将介绍一些对初学者有帮助的辅助类,这些辅助类本身并没有什么稀奇之处,如何能发现需要封装它们可能更加重要,所谓授之以鱼不如授之以渔,掌握封装公共操作类的技巧才是关键,我会详细说明创建这些类的动 ...