1. RabbitMQ

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有MSMQ,ActiveMQ,RabbitMQ,IBM WEBSPHERE MQ 等。
RabbitMQ是使用Erlang开发的,开源的,一个在高级消息队列协议(AMQP)基础上完整的,可复用的企业消息系统,遵循Mozilla Public License开源协议。
RabbitMQ支持大多数开发语言如Java,Ruby,Python,.Net,C/C++,Erlang等,各种语言的客户端可以从官网上下载。

2. RabbitMQ的一些概念

- 连接(Connection),与RabbitMQ Server建立的一个连接,由ConnectionFactory创建,每个connection只与一个物理的Server进行连接,此连接是基于Socket进行连接的,这个可以相似的理解为像一个DB Connection。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),将交换器和队列连接起来,并且封装消息的路由信息。

3.资源文件

4.发送消息

 /// <summary>
/// </summary>
/// <param name="deptId">部门id</param>
/// <param name="userCode">用户名</param>
/// <returns></returns>
[Generated]
protected override String SendMQ(long deptId, string userCode, string clientIP)
{
var factory = new ConnectionFactory();
factory.HostName = "182.94.73.104"; //MQ服务端IP
factory.Port = ; //MQ 服务端端口
factory.UserName = "login_mq_user";
factory.Password = "chinaiss_xyz@345Q1uTfcx.vb";
//factory.HostName = "localhost";
//factory.UserName = "yy";
//factory.Password = "hello!"; string ticket = System.Guid.NewGuid().ToString(); //对应URL中的token参数 //MQINFOPoco MQobj = new MQINFOPoco();
//MQobj.clientIP = clientIP;
//MQobj.section = deptId;
//MQobj.userId = userCode;
//MQobj.loginTime = GetTimeStamp();
//MQobj.timeLive = 480;
//MQobj.token = ticket;
var loginTime = GetTimeStamp(); using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("login_queue", false, false, false, null); //MQ队列名称login_queue
//string message = ObjectToJson(MQobj);
StringBuilder message = new StringBuilder(@"{""clientIP"":");
message.AppendFormat("\"{0}\"", clientIP);
message.AppendFormat(",\"section\":\"{0}\"", deptId);
message.AppendFormat(",\"userId\":\"{0}\"", userCode);
//message.Append(",\"userId\":\"hxj\"");
message.AppendFormat(",\"loginTime\":{0}", loginTime);
message.Append(",\"timeLive\":480");
message.AppendFormat(",\"token\":\"{0}\"", ticket);
message.Append("}"); var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);
var body = Encoding.UTF8.GetBytes(message.ToString());
channel.BasicPublish("", "login_queue", properties, body);
}
} return ticket;
}

C# 使用 RabbitMQ的更多相关文章

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. RabbitMq应用二

    在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...

  3. 如何优雅的使用RabbitMQ

    RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具.消息队列的使用场景大概有3种: 1.系统集成,分布式系统的设 ...

  4. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  5. RabbitMq应用一

    RabbitMq应用一 RabbitMQ的具体概念,百度百科一下,我这里说一下我的理解,如果有少或者不对的地方,欢迎纠正和补充. 一个项目架构,小的时候,一般都是传统的单一网站系统,或者项目,三层架构 ...

  6. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  7. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  8. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  9. RabbitMQ + PHP (三)案例演示

    今天用一个简单的案例来实现 RabbitMQ + PHP 这个消息队列的运行机制. 主要分为两个部分: 第一:发送者(publisher) 第二:消费者(consumer) (一)生产者 (创建一个r ...

  10. RabbitMQ + PHP (二)AMQP拓展安装

    上篇说到了 RabbitMQ 的安装. 这次要在讲案例之前,需要安装PHP的AMQP扩展.不然可能会报以下两个错误. 1.Fatal error: Class 'AMQPConnection' not ...

随机推荐

  1. git- 仓库创建、修改、提交、撤销

    1.仓库创建 zhangshuli@zhangshuli-MS-:~$ mkdir myGit zhangshuli@zhangshuli-MS-:~$ cd myGit/ zhangshuli@zh ...

  2. HDU 多校联合 6033 6043

    http://acm.hdu.edu.cn/showproblem.php?pid=6033 Add More Zero Time Limit: 2000/1000 MS (Java/Others)  ...

  3. echarts统计图踩坑合集

    1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...

  4. echarts如何设置背景图的颜色

    公司的业务涉及到统计图的有很多,最近一直echarts里面踩各种坑,感觉应该建立一个echarts专题才对,前端的东西博大精深,无论在哪一个知识点,只要细细深究,都是别有一方天地在等待,随着需求的不同 ...

  5. javascript之Ajax起步

    XMLHttpRequest  readyState属性的值: UNSENT--0--已创建XMLHttpRequest对象. OPENED--1--已调用open方法: HEADERS_RECEIV ...

  6. [bzoj1269]文本编辑器editor [bzoj1500]维修数列

    1269: [AHOI2006]文本编辑器editor Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2540 Solved: 923 [Submit ...

  7. win10系统64位安装git后右键运行git bash here生成一个mintty.exe.stackdump文件后闪退解决方案

    在其他win10电脑上复制了一个null.sys文件,替换C:\Windows\System32\drivers\null.sys,搞定.

  8. noi25 最长最短单词(为什么会出现运行时错误)

    noi25 最长最短单词(为什么会出现运行时错误) 一.总结 一句话总结:比如除以零,数组越界,指针越界,使用已经释放的空间,数组开得太大,超出了栈的范围,造成栈溢出 1.c++报runtime er ...

  9. Codeforces Round #450 (Div. 2) D.Unusual Sequences (数学)

    题目链接: http://codeforces.com/contest/900/problem/D 题意: 给你 \(x\) 和 \(y\),让你求同时满足这两个条件的序列的个数: \(a_1, a_ ...

  10. python输出杨辉三角

    使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...