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线 ...
随机推荐
- OC学习篇之—写类别(类的扩展)
首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类 ...
- java測试网络连接是否成功并设置超时时间
/** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override p ...
- centos中的配置文件 分类: B3_LINUX 2015-04-03 22:21 184人阅读 评论(0) 收藏
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...
- [Angular] Test Directive
directive: import { Directive, HostListener, HostBinding, ElementRef } from '@angular/core'; @Direct ...
- thinkphp3.1 发送email
//*********************发送邮件************************** Vendor('email'); //******************** 配置信息 * ...
- margin隐藏最后的切割线
<style> *{margin: 0;padding: 0;} #demo li{ border-bottom: 1px solid #ccc; } #demo ul{ margin-b ...
- [React Unit Testing] React unit testing demo
import React from 'react' const Release = React.createClass({ render() { const { title, artist, outO ...
- Wow6432Node(32位程序的注册表内容都在这个节点下,也可直接使用%systemroot%\syswow64\regedit进行编辑)
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- 【u110】灾后重建
Time Limit: 1 second Memory Limit: 128 MB [问题描述] B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前, ...
- 【codeforces 546E】Soldier and Traveling
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...