2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例
2016-04-25 23:25
344 查看
关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置
公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求做成win form的,这明显不合理,因为之前,服务器上我已经放置了一个 短信的winform的服务。那么到后期的话,登录服务器之后,全是
一个个的窗体挂在那儿,这明显合不合常理,但是领导要求这么玩,也没办法, 因为卧虎要负责的是消费 消息,所以重点说明 消费端
该案例的接收端,源自网上的代码片段 片内容,做了部分修改之后使用
using RabbitMQ.Client; using System; using System.Text; namespace RubbitMQClient { /// <summary> /// 1.Routing (按路线发送接收) /// </summary> public class RoutingType { public static void RoutingProducer(string[] arguments) { arguments = new string[] { "0","" }; string serverAddress = "127.0.0.1"; string account = "CC"; string password = "123qwe"; ConnectionFactory factory = new ConnectionFactory() { HostName = serverAddress, UserName = account, Password = password, VirtualHost = "/" }; IConnection conn = factory.CreateConnection(); for (int i = 0; i < 1000; i++) { arguments[1] = i.ToString(); string queueName = "testQueueName"; using (var channel = conn.CreateModel()) { //---1.声明durable Exchange 和 Queue-------------------------------------------------------------------------------------------------------------- channel.ExchangeDeclare(Consts.EXCHANGE_NAME_DIRECT, "direct", durable: true, autoDelete: false, arguments: null); //arguments = new[] { "12321", "32432" }; channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null); channel.QueueBind(queueName, Consts.EXCHANGE_NAME_DIRECT, routingKey: "");//queueName //---------------------------------------------------------------------------------------------------------------------- //---2.发布持久化消息到队列 --------------------------------------------------------------------------------------------------- var props = channel.CreateBasicProperties(); //props.Priority = 3;//控制优先级 props.DeliveryMode = 2;//将信息也持久化 props.Persistent = true;///SetPersistent方式提示已经过时,建议使用当前方式 string severity = getSeverity(arguments); string message = getMessage(arguments); byte[] buffer = Encoding.UTF8.GetBytes(message); channel.BasicPublish(Consts.EXCHANGE_NAME_DIRECT, routingKey: "", basicProperties: props, body: buffer); ////---消费消息 //BasicGetResult msgResponse = channel.BasicGet(queueName, noAck: true); //var msgBody = Encoding.UTF8.GetString(msgResponse.Body); //Console.WriteLine(msgBody); //3.1(发布方式还有一种 基于推送的事件订阅 )第二种方式(使用内置的 QueueingBasicConsumer 提供简化的编程模型,通过允许您在共享队列上阻塞,直到收到一条消息) //var consumer = new QueueingBasicConsumer(channel); //channel.BasicConsume(queueName, noAck: true, consumer: consumer); //var msgResponse = consumer.Queue.Dequeue(); //blocking //var msgBody = Encoding.UTF8.GetString(msgResponse.Body); } } conn.Close(); Console.ReadKey(); } private static String getSeverity(String[] strings) { if (strings.Length < 1) return "routing(direct) type info"; return strings[0]; } private static String getMessage(String[] strings) { if (strings.Length < 2) return "routing(direct) --> Hello World!"; return joinStrings(strings, " ", 1); } private static String joinStrings(String[] strings, String delimiter, int startIndex) { return strings[1].ToString(); } } }View Code
抽时间将上面涉及到的 mq一些相关 属性(常用的API的),在总结下,主要是零散,其实东西很简单,如何更好的,更灵活的组合到一起,是这个插件使用的 最主要一点。
相关文章推荐
- D3D11无双(1):渲染你的第一个三角形
- xml几种解析方式的优缺点
- 下拉刷新demo的总结
- maven web项目打包部署
- HttpUrlConnection以GET方式和POST方式请求服务器
- 重载算术运算符与重载赋值运算符
- floyd算法
- hdu 1159 && POJ 1458Common Subsequence(LCS)
- 机器学习的个人见解----深夜总结
- C++混合编程之idlcpp教程Python篇(7)
- 《校园封神榜》个人工作总结——第八天
- 自动化 测试框架部署(python3+selenium2)
- leetcode-24. Swap Nodes in Pairs
- 自实现简单线程池
- Bellman-Ford算法
- 广度优先搜索迷宫的最短路径走法!
- 重载赋值运算符
- 具有拷贝构造函数的类作形参
- (31)Spring Boot导入XML配置【从零开始学Spring Boot】
- Python编程-字符串的编码转换、存储及乱码问题