RabbitMQ(三)——简单模式
RabbitMQ系列
RabbitMQ(三)——简单模式
前言
简单模式中有一个生产者一个消费者,这里分别是SimpleServer,SimpleClient.SimpleServer作为生产者,给队列发送消息,而SimpleClient作为消费者去消费消息。每条消息都是消费完就没了。
创建项目
SimpleServer:
- 创建工厂ConnectionFactory并初始化,这里连接的是本地,远程只需改变地址即可,账号密码默认为guest。
- 使用工厂创建一个连接对象。
- 通过连接对象创建一个通道。
- 声明一个队列,用来存放消息,这里给队列命名为simple。
- 使用IModel.BasicPublish()向队列发布消息。
static void Main(string[] args)
{
//1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//2.创建连接
var connection = factory.CreateConnection();
//3.创建管道
var channel = connection.CreateModel();
//4.声明队列
channel.QueueDeclare("simple", false, false, false, null); string msg = "这是一条消息";
var sendByte = Encoding.UTF8.GetBytes(msg);
//5.发布消息
channel.BasicPublish("", "simple", null, sendByte); channel.Close();
connection.Close();
}
SimpleClient:
- 初始化工厂
- 创建连接
- 创建通道
- 创建消费者
- 开始消费消息
- 接收消息做一些事情...
static void Main(string[] args)
{
//初始化工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//创建连接
using (IConnection connection = factory.CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
//声明队列
channel.QueueDeclare("simple", false, false, false, null);
//创建消费者对象
var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, e) =>
{
byte[] message = e.Body.ToArray();
Console.WriteLine("接收消息:" + Encoding.UTF8.GetString(message));
//返回消息确认
channel.BasicAck(e.DeliveryTag, false);
};
//消费者开启监听
channel.BasicConsume("simple", false, consumer);
Console.ReadLine();
}
}
}
效果:
我们先改下生产者发布消息的代码,发布10条消息
for (int i = 0; i < 10; i++)
{
string msg = $"第{i+1}条消息";
//5.发布消息
channel.BasicPublish("", "simple", null, Encoding.UTF8.GetBytes(msg));
Console.WriteLine($"已发送消息:{msg}");
}
现在我们打开本地RabbitMQ管理后台 http://localhost:15672/
启动SimpleServer程序发布消息后出现十条记录:

开始消费消息:

消费后simple队列里的消息从10条变成了0条。
本篇到这就完结了,下一篇工作队列模式
附上Demo地址:https://github.com/1164887865/RabbitMQDemo
RabbitMQ(三)——简单模式的更多相关文章
- RabbitMQ(三):消息持久化策略
原文:RabbitMQ(三):消息持久化策略 一.前言 在正常的服务器运行过程中,时常会面临服务器宕机重启的情况,那么我们的消息此时会如何呢?很不幸的事情就是,我们的消息可能会消失,这肯定不是我们希望 ...
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- RabbitMQ的简单模式快速入门与超时异常的处理方法
本文适合JAVA新人,想了解RabbitMQ又不想去看官网文档的人(英语水看的头疼(◎﹏◎),但建议有能力还是去看官网文档). 消息队列MQ(一) MQ全称为Message Queue,消息队列是应用 ...
- 【转】RabbitMQ三种Exchange模式
[转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- 学习RabbitMQ(三):AMQP事务机制
本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- RabbitMQ三种Exchange模式
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- [转]RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
随机推荐
- npm depcheck 包依赖检查
1.概述 在前端开发时,如果经常会遇到一些依赖的问题,比如一个项目,之前在 package.json安装了某个包,后来又删除了这个包,但是node_modules 包还是在的,但是我们把代码给其他人安 ...
- InheritableThreadLocal 父子线程值传递
最近项目中使用 @Async 异步远程调用的时候,发现主线程能拿到 token 值,子线程调用的时候 token 为 null.研究了一番,发现可以直接使用 InheritableThreadLoca ...
- MySql 9 in Docker 利用克隆插件搭建主从
环境说明 Docker Windows 11 MySql 9.1.0 搭建步骤 1. 准备主库 准备一个主库的配置文件 master.cnf [mysqld] server-id=1 log-bin= ...
- 从源码分析 GMP 调度原理
本身涉及到的 go 代码 都是基于 go 1.23.0 版本 传统 OS 线程 线程是 CPU 的最小调度单位,CPU 通过不断切换线程来实现多任务的并发.这会引发一些问题(对于用户角度): 线程的创 ...
- StarBlog博客Vue前端开发笔记:(2)页面路由
前言 Vue.js 使用虚拟 DOM 处理单页面,然后使用 Webpack 打包.通过上一篇文章的例子,读者也许已经发现,无论语法和写法如何不同,Vue.js 程序打包后都是一个单一的 HTML 文件 ...
- mysql基础之增删改查
标签: mysql 增加数据 -- 增加数据 use myblog; insert into users(username, `password`, realname) values('zhangsa ...
- 实用干货分享(4)- 分布式金融PaaS容器化部署实战
编辑 一.学习链接 http://www.itmuch.com/docker/00-docker-lession-index/ 二.安装步骤 sudo yum install -y yum-ut ...
- [sa-token]StpUtil.getLoginId
闲聊 一般情况下,我们想用uid,可能需要前端将uid传过来,或者将token传来,然后我们进行识别. 用了sa-token之后,可以使用StpUtil.getLoginId()方法获取当前会话的用户 ...
- Nginx make报错处理
https://blog.csdn.net/zhengdong12345/article/details/130669711 make报错:fatal error:sys/sysctl.h:No su ...
- 更改linux文件/目录的权限、拥有者及用户组
在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用户可以修改该文件的拥有者及用户组,root用户可以修改任何文件的拥有者及用户组. 在Linux中,对于文件的权限(rwx), ...