c#生产/消费RabbitMQ
public sealed class JsonSerializer
{
public static byte[] Serialize(object message)
{
return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message));
} public static object Deserialize<T>(byte[] bytes)
{
return JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(bytes));
}
}
public sealed class BinarySerializer
{
public static byte[] SerializeToBytes(object obj)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, obj); return StreamUtil.ReadAllBytes(stream);
}
} public static object DeserializeFromBytes(byte[] bytes)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream(bytes))
{
return formatter.Deserialize(stream);
}
}
}
private static bool RawPublishMessage()
{
var exchange = "TestExchangeRouting...";
var routingKey = "rk";
Uri uri = new Uri("amqp://192.168.1.1:1234/");
ConnectionFactory factory = new ConnectionFactory(); factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.RequestedHeartbeat = ;
factory.Endpoint = new AmqpTcpEndpoint(uri); //创建一个连接
using (IConnection connection = factory.CreateConnection())
{
//创建一个通道
using (IModel channel = connection.CreateModel())
{
//声明一个路由
channel.ExchangeDeclare(exchange, "direct");
var queueOk = channel.QueueDeclare("testQueue", true, false, false, null);
channel.QueueBind(queueOk.QueueName, exchange, routingKey); var model = new Order
{
Id = ,
Title = "工一一个测试Test"
}; //这个才是具体的发送内容 var body = JsonSerializer.Serialize(model); var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);
properties.ContentType = typeof(Order).AssemblyQualifiedName;
properties.ContentEncoding = "JSON"; //写入
channel.BasicPublish(exchange, routingKey, properties, body);
Console.WriteLine("写入成功");
} }
return false;
} private static bool RawGetMessage()
{
var exchange = "TestExchangeRouting...";
var routingKey = "rk";
Uri uri = new Uri("amqp://192.168.1.1:1234/");
ConnectionFactory factory = new ConnectionFactory(); factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
factory.RequestedHeartbeat = ;
factory.Endpoint = new AmqpTcpEndpoint(uri); //创建一个连接
using (IConnection connection = factory.CreateConnection())
{
//创建一个通道
using (IModel channel = connection.CreateModel())
{
var basicConsumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("testQueue", false, basicConsumer); while (true)
{
try
{
BasicDeliverEventArgs basicDeliverEventArgs ;
basicConsumer.Queue.Dequeue(, out basicDeliverEventArgs);
if (basicDeliverEventArgs == null)
{
break;
} Task.Run(() =>
{
channel.BasicAck(basicDeliverEventArgs.DeliveryTag, false);
}).Wait(); var body = JsonSerializer.Deserialize<Order>(basicDeliverEventArgs.Body);
Console.WriteLine(string.Format("RoutingKey:{0},Body:{1}", basicDeliverEventArgs.RoutingKey,
JsonConvert.SerializeObject(body, Formatting.Indented)));
}
catch (Exception)
{
break;
}
} channel.Close();
}
connection.Close();
} return false;
}
public static byte[] ReadAllBytes(Stream stream)
{ var bytes = new byte[stream.Length]; stream.Seek(, SeekOrigin.Begin); for (var i = ; i < stream.Length; i++)
{
bytes[i] = (byte)stream.ReadByte();
} return bytes;
}
c#生产/消费RabbitMQ的更多相关文章
- kafka生产消费原理笔记
一.什么是kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性 ...
- kafka_2.11-0.8.2.1+java 生产消费程序demo示例
Kafka学习8_kafka java 生产消费程序demo示例 kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kaf ...
- Python并发编程-生产消费模型
生产消费模型初步 #产生两个子进程,Queue可以在子进程之间传递消息 from multiprocessing import Queue,Process import random import t ...
- kafka之三:kafka java 生产消费程序demo示例
kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kafka的安装请参考官方文档. 首先我们需要新建一个maven项目,然后在 ...
- 守护进程,互斥锁, IPC ,Queue队列,生产消费着模型
1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. ...
- 7.JUC线程高级-生产消费问题&虚假唤醒
描述 生产消费问题在java多线程的学习中是经常遇到的问题 ,多个线程共享通一个资源的时候会出现各种多线程中经常出现的各种问题. 实例说明 三个类:售货员Clerk,工厂Factory,消费者Cons ...
- Dyno-queues 分布式延迟队列 之 生产消费
Dyno-queues 分布式延迟队列 之 生产消费 目录 Dyno-queues 分布式延迟队列 之 生产消费 0x00 摘要 0x01 前情回顾 1.1 设计目标 1.2 选型思路 0x02 产生 ...
- 【java并发编程】Lock & Condition 协调同步生产消费
一.协调生产/消费的需求 本文内容主要想向大家介绍一下Lock结合Condition的使用方法,为了更好的理解Lock锁与Condition锁信号,我们来手写一个ArrayBlockingQueue. ...
- Python学习之路并发编程--信号量、事件、队列及生产消费模型
1. 信号量 对于多进程来说,多个进程同时修改数据,就可能出现安全隐患,所以引入了锁,这一机制,但锁只能有一把来控制一个的开关,当你需要几把锁的时候,就可能用到信号量的概念.他是用了锁的原理,内置了一 ...
随机推荐
- 我们为什么要在C++中使用虚函数
类中的成员函数分为静态成员函数和非静态成员函数,而非静态成员函数又分为普通函数和虚函数. 至于为什么虚函数必须是非静态成员函数,可以看一下:http://blog.csdn.net/leiming32 ...
- React 和 Redux理解
学习React有一段时间了,但对于Redux却不是那么理解.网上看了一些文章,现在把对Redux的理解总结如下 从需求出发,看看使用React需要什么 1. React有props和state pro ...
- URLTester2.3.2
文件: URLTester2.3.2.zip 大小: 1170KB 下载: 下载 URLTester是一个URL测试工具,最主要的一个特色是:当一个域名对应多个IP地址时,不用修改hosts文件,即可 ...
- C++ string操作(转载)
1.string类的构造函数 string(const char * s); //用s字符串初始化 string(const string &s);//用string类的s初始化 string ...
- CefSharp使用一
一.使用NuGet搜索CefSharp然后下载CefSharp.WinForms和CefSharp.Common 二.引用CefSharp.Windows,CefSharp,CefSharp三个dll ...
- 数据加密实战之记住密码、自动登录和加密保存数据运用DES和MD5混合使用
MD5的简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有 ...
- 【2】循序渐进学 Zabbix:安装配置 Zabbix Server 服务端
上一篇 [1]循序渐进学 Zabbix :初识与基础依赖环境搭建( LNMP ) 安装 Zabbix Server 上篇我们在 192.168.200.101 上面安装了 Zabbix 所依赖的 LN ...
- UGUI 深度優化提升手遊效能
https://hackmd.io/s/S1z1ByaGb#UGUI-%E6%B7%B1%E5%BA%A6%E5%84%AA%E5%8C%96%E6%8F%90%E5%8D%87%E6%89%8B%E ...
- 转载文章 MySQL与Oracle的区别
MySQL与Oracle的区别 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高 ...
- c++运算符重载-如何决定作为成员函数还是非成员函数
The Decision between Member and Non-member The binary operators = (assignment), [] (array subscripti ...