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. 信号量 对于多进程来说,多个进程同时修改数据,就可能出现安全隐患,所以引入了锁,这一机制,但锁只能有一把来控制一个的开关,当你需要几把锁的时候,就可能用到信号量的概念.他是用了锁的原理,内置了一 ...
随机推荐
- Java通过JDBC 进行Dao层的封装
前言 前面有一章节,我专门讲解了Java通过JDBC 进行MySQL数据库操作,这主要讲解了MySQL数据库的连接和简单的操作,但是在真正的Java项目中,我们要不断的和数据库打交道,为了提高数据库操 ...
- 【270】IDL处理GeoTIFF数据
参考:将原GeoTIFF数据的投影坐标信息赋值到新创建的文件上 pro tiff_projection ;启动ENVI e = ENVI(/HEADLESS) ;打开文件 file = 'D:\01- ...
- Template Method模式和Strategy模式有何异同
Template Method模式和Strategy模式有何异同 博客分类: 设计模式 Java Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类 ...
- css3(border-radius)边框圆角详解(转)
css3(border-radius)边框圆角详解 (2014-05-19 16:16:29) 转载▼ 标签: divcss html it css3 分类: 网页技术 传统的圆角生成方案,必须使用多 ...
- IFC—IfcProduct实体继承框架
- 业务逻辑:shiro框架的功能实现
思路:分别在web.xml配置过滤器以及在applicationContext.xml去配置 实现步骤:1.在pom.xml里引入shiro的坐标 2.在web.xml里配置shiro过滤器 3.在a ...
- Spring IOC容器解析及实现原理
最近一段时间,“容器”两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助sprin ...
- ZROI2018普转提day6t3
传送门 分析 居然卡哈希数,万恶的出题人...... 感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq 应该是可以直接哈希的 但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线 ...
- Luogu 3267 [JLOI2016/SHOI2016]侦察守卫
以后要记得复习鸭 BZOJ 4557 大佬的博客 状态十分好想,设$f_{x, i}$表示以覆盖完$x$为根的子树后还能向上覆盖$i$层的最小代价,$g_{x, i}$表示以$x$为根的子树下深度为$ ...
- JavaScript 学习中
邮箱的验证: <!DOCTYPE html><html> <head> <meta charset="UTF-8"&g ...