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的更多相关文章

  1. Celery 框架学习笔记(生产者消费者模式)

    生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产 ...

  2. day 28 :进程相关,进程池,锁,队列,生产者消费者模式

    ---恢复内容开始--- 前情提要: 一:进程Process  1:模块介绍 from multiprocessing import Process from multiprocessing impo ...

  3. java多线程 生产者消费者模式

    package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...

  4. LabVIEW之生产者/消费者模式--队列操作 彭会锋

    LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...

  5. 转:Task任务调度实现生产者消费者模式 (个人理解后文)

    纯属个人愚见.欢迎加入反驳(PiDou). 1.前文大致就是,利用Queue配置的一个TaskFactory任务调度器.实现生产者消费者模式的例子..首先我就试了 第一种 FIFO(先进先出)的配置. ...

  6. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  7. MVC异常日志生产者消费者模式记录(异常过滤器)

    生产者消费者模式 定义自己的异常过滤器并注册 namespace Eco.Web.App.Models { public class MyExceptionAttribute : HandleErro ...

  8. 转:Task任务调度实现生产者消费者模式

    我们经常会遇到生产者消费者模式,比如前端各种UI操作事件触发后台逻辑等.在这种典型的应用场景中,我们可能会有4个业务处理逻辑(下文以P代表生产者,C代表消费者): 1. FIFO(先进先出)      ...

  9. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...

随机推荐

  1. 面向对象的CSS

    原文 简书原文:https://www.jianshu.com/p/cb5e9f56ddcc 大纲 1.面向对象的CSS(OOCSS)概念 2.面向对象的CSS的作用 3.面向对象的CSS的注意事项 ...

  2. nginx服务器,访问时如何不直接显示index.php,而是显示目录

    版权声明:m_nanle_xiaobudiu https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79502787 效果: 这里,我使用的是 ...

  3. thinkphp自动完成、软删除 和时间戳

    thinkphp自动完成.软删除 和时间戳 一.总结 自动完成:没有手动赋值的情况下进行手动处理 软删除:实现假删除,可以进行恢复 时间戳:系统支持自动写入创建和更新的时间戳字段 二.thinkphp ...

  4. 修改SVN中文件的可执行属性

    博文来自下面路径,转载请注明原出处: http://bigwhite.blogbus.com/logs/74568031.html 修改SVN中文件的可执行属性 - [开源世界] Tag:开源世界 S ...

  5. 【30.93%】【codeforces 558E】A Simple Task

    time limit per test5 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  6. window.onload,<body onload="function()">, document.onreadystatechange, httpRequest.onreadystatechang 分类: C1_HTML/JS/JQUERY 2014-08-06 16:47 558人阅读 评论(0) 收藏

    部分内容参考:http://www.aspbc.com/tech/showtech.asp?id=1256 在开发的过程中,经常使用window.onload和body onload两种,很少使用do ...

  7. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用

    Java 中无锁的线程安全整数 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候, 不可避免的会用到synchron ...

  8. [TypeScript] Find the repeated item in an array using TypeScript

    Say you have an array that has at least one item repeated. How would you find the repeated item. Thi ...

  9. [Compose] 8. A curated collection of Monoids and their uses

    const { List } = require('immutable-ext'); const Right = x => ({ chain : f => f(x), ap : other ...

  10. php汉字字符串长度和截取

    mb_strlen("你好123",'utf-8');//返回5 strlen("你好");//返回几我也不知道,肯定不是2,但你想要2就用上面的 substr ...