4.生产者 消费者模式的RabbitMQ
1.生产者:
using RabbitMQ.Client;
using System;
using System.Text; namespace Publisher1
{
class Program
{
static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "mytest",
Password = "mytest"
};
//第一步:创建connection
var connection = factory.CreateConnection();
//第二步:创建channel
var channel = connection.CreateModel();
//第三步:申明交换机 //第四步:声明一个队列
channel.QueueDeclare("manQueue", true, false, false, null);
//循环往队列中插入100条数据
for (int i = ; i <= ; i++)
{
var msg = Encoding.UTF8.GetBytes($"{i}:希望!");
//第五步:发布消息
channel.BasicPublish(string.Empty, routingKey: "manQueue", basicProperties: null, body: msg);
} Console.WriteLine("完成");
}
}
}
2.消费者
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text; namespace Consumer1
{
class Program
{
static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "mytest",
Password = "mytest"
};
//第一步:创建connection
var connection = factory.CreateConnection();
//第二步:创建channel
var channel = connection.CreateModel();
//第三步:申明交换机
channel.QueueDeclare("manQueue", true, false, false, null); //第四步:获取消息
//BasicGet是主动获取 这里要使用发布订阅模式
//var result = channel.BasicGet("manQueue", true);
//var msg = Encoding.UTF8.GetString(result.Body);
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
consumer.Received += (sender,e)=> {
var msg = Encoding.UTF8.GetString(e.Body);
Console.WriteLine(msg);
};
//第五步 要指出 去订阅哪个队列 用哪个消费者
channel.BasicConsume("manQueue", true, consumer);
Console.ReadKey();
}
}
}
3.如果要使用自定义的交换机 不用默认的交换机
using RabbitMQ.Client;
using System;
using System.Text; namespace Publisher1
{
class Program
{
static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "mytest",
Password = "mytest"
};
//第一步:创建connection
var connection = factory.CreateConnection();
//第二步:创建channel
var channel = connection.CreateModel();
//第三步:申明交换机
channel.ExchangeDeclare("MyExchange",ExchangeType.Direct,true,false,null);
//由于不是默认的交换机 所以还要跟队列做一个绑定
channel.QueueBind("manQueue", "MyExchange", "manQueue", null); //第四步:声明一个队列
channel.QueueDeclare("manQueue", true, false, false, null);
//循环往队列中插入100条数据
for (int i = ; i <= ; i++)
{
var msg = Encoding.UTF8.GetBytes($"{i}:希望!");
//第五步:发布消息
//这时候要使用指定的交换机
//channel.BasicPublish(string.Empty, routingKey: "manQueue", basicProperties: null, body: msg);
channel.BasicPublish("MyExchange", routingKey: "manQueue", basicProperties: null, body: msg);
} Console.WriteLine("完成");
}
}
}
4.生产者 消费者模式的RabbitMQ的更多相关文章
- Celery 框架学习笔记(生产者消费者模式)
生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产 ...
- day 28 :进程相关,进程池,锁,队列,生产者消费者模式
---恢复内容开始--- 前情提要: 一:进程Process 1:模块介绍 from multiprocessing import Process from multiprocessing impo ...
- java多线程 生产者消费者模式
package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...
- LabVIEW之生产者/消费者模式--队列操作 彭会锋
LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...
- 转:Task任务调度实现生产者消费者模式 (个人理解后文)
纯属个人愚见.欢迎加入反驳(PiDou). 1.前文大致就是,利用Queue配置的一个TaskFactory任务调度器.实现生产者消费者模式的例子..首先我就试了 第一种 FIFO(先进先出)的配置. ...
- Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- MVC异常日志生产者消费者模式记录(异常过滤器)
生产者消费者模式 定义自己的异常过滤器并注册 namespace Eco.Web.App.Models { public class MyExceptionAttribute : HandleErro ...
- 转:Task任务调度实现生产者消费者模式
我们经常会遇到生产者消费者模式,比如前端各种UI操作事件触发后台逻辑等.在这种典型的应用场景中,我们可能会有4个业务处理逻辑(下文以P代表生产者,C代表消费者): 1. FIFO(先进先出) ...
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...
随机推荐
- spring boot 2.x Path with "WEB-INF" or "META-INF"
学习spring boot 2.x时,使用jsp作为前端页面.在application.properties配置了jsp所在位置 spring.mvc.view.prefix:/WEB-INF/vie ...
- 2、HZK和FreeType的使用
HZK16汉字库的使用 定义如下: unsigned char str[]="我" 在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位 ...
- JAVA日志库2
一.常用日志Jar关系 2015第30周四Java日志组件 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流的日志实现 旧日志到slf4j的适配器:如果使用了slf4j,但是只想用 ...
- 同一master,两个slave的server_id相同问题处理
错误日志报错如下: 2017-09-15 18:45:59 1660 [Note] Slave I/O thread: Failed reading log event, reconnecting t ...
- HDU 1406 完数 因子的和
http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6= ...
- POJ 2823 Sliding Window 线段树
http://poj.org/problem?id=2823 出太阳啦~^ ^被子拿去晒了~晚上还要数学建模,刚才躺在床上休息一下就睡着了,哼,还好我强大,没有感冒. 话说今年校运会怎么没下雨!!!说 ...
- 15.1 linux操作系统下nand flash驱动框架2
当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备. 而写驱动,就是要构建硬件与操作系统之间 ...
- js进阶 11-17 juqery如何查找一个元素的同级元素
js进阶 11-17 juqery如何查找一个元素的同级元素 一.总结 一句话总结:三个方法,向前(prev()),向后(next())和兄弟(siblings()),而前面两个每个都对应三个,pre ...
- windows phone 2048 源代码奉上
小梦今天把2048的游戏源代码给大家分享一下,其实感觉这个重在算法,UI很简单,而且几乎没有用到什么windows phone的API.小梦遇到最主要的问题就是对触摸事件的处理,我刚开始想到的就是 M ...
- Tricks(四十九)—— 按 batch 访问越界的解决办法
使用 min 函数指定访问的最终位置,本质上是增加一个条件判断: done = false; batch_size = 10000; idx = 1; while ~done idx_end = mi ...