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. 信号量 对于多进程来说,多个进程同时修改数据,就可能出现安全隐患,所以引入了锁,这一机制,但锁只能有一把来控制一个的开关,当你需要几把锁的时候,就可能用到信号量的概念.他是用了锁的原理,内置了一 ...
随机推荐
- python的程序书写以及保存
在前面的微博里已经叙述Python的安装以及路径的设置. 在我们的windows的电脑上面我们已经安装完了python以及设置了它的路径,所以我们可以再cmd里面进行Python的编写(cmd的快速打 ...
- Android上 dip、dp、px、sp等单位说明
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. ...
- UWP蓝牙的例子
https://answers.microsoft.com/zh-hans/windows/forum/windows_10-networking/%e5%9c%a8win10%e7%8e%af%e5 ...
- HDU 6395(2018多校第7场1010)Sequence
不久前做过POJ3070,所以知道这题要用矩阵快速幂优化,但是这个题的递推公式中有一项⌊p/n⌋,场上就不会了... 下来才知道要用分块矩阵快速幂,因为⌊p/n⌋最多有2√p块,可以对每一块使用快速幂 ...
- strcmp()比较函数和strcasecmp()和strnatcmp()
strcmp()的函数原型如下() int strcmp(string str1,string str2) 该函数需要两个进行比较的参数字符串,如果这两个字符串相等,该函数就返回0,如果按字典顺序st ...
- 关于A类,B类,C类IP地址的网段和主机数的计算方法
关于A类,B类,C类IP地址的网段和主机数的计算方法 IP地址是一个32位的二进制数,由四个八位字段组成.每个IP地址包括两部分:一部分为网络标识(网络号),一部分为主机标识(主机号). A类地址前8 ...
- linux鸟哥的私房菜
这书还是感觉非常棒,真的是授之以渔而不是授之以鱼.我觉得只需要掌握一个命令就可以了man -k KEYWORD 比如我想查找和防火墙相关的命令,那么 man -k firewall 结果是ufw 然后 ...
- Luogu 1445 樱花
BZOJ 2721 唔,太菜了弄不来. 先通分:得到 $\frac{x + y}{xy} = \frac{1}{n!}$ 两边乘一下 $(x + y)n! - xy = 0$ 两边加上$(n!)^2$ ...
- 精美3D中国象棋
本人2013年的巅峰之作,现在已经完全免费放送.象棋界面的史诗革命.当前下载版本仅支持Windows 平台. 操作: 方向键的 上,下,左,右 控制棋盘翻转.Home 键回到初始状态,End按键回到平 ...
- java快排(两种方法)
快排是最基础的排序算法之一,今天来回顾一下. public class QuickSort { public static void quickSort(int[] array){ if(array ...