消息队列

消息回调

廉价感情. 提交于 2020-01-12 05:30:09
0. 项目结构 rabbitmq04 rabbitmq-provider rabbitmq-consumer common 1. 什么是消息回调 消息回调,其实就是消息确认(生产者推送消息成功,消费者接收消息成功) 2. 为什么要进行消息确认 经常会听到丢消息的字眼, 对于程序来说,发送者没法确认是否发送成功,消费者处理失败也无法反馈, 没有消息确认机制,就会出现消息莫名其妙的没了,也不知道什么情况 3. 生产者推送消息[确认] 0.前提:使用直连交换机完成消息的发送和接收 1.在rabbitmq-provider项目的application.yml文件上,添加消息确认的配置项 #1.开启 confirm 确认机制 spring.rabbitmq.publisher-confirms=true #2.开启 return 确认机制 spring.rabbitmq.publisher-returns=true #3.设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数 spring.rabbitmq.template.mandatory=true server : port : 8081 servlet : context-path : /rabbitmq - provider spring : rabbitmq : virtual-host : /

RabbitMQ 之 四种使用方式

大兔子大兔子 提交于 2020-01-12 04:21:18
、介绍 RabbitMQ是消息代理:它接受并转发消息.假想RabbitMQ是一个邮局:消息提供者把消息交给邮局,邮局在将消息分发给消息消费者. RabbitMQ与邮局的区别在于,它处理的不是信件,而是接受,存储和转发数据消息的二进制数. 这里会出现几个名词: 生产者:生产者意味着发送消息.而发送消息的程序称为生产者. 队列:RabbitMQ内部的邮件名称.尽管消息流经RabbitMQ和您的应用程序,但它们只有存储在队列中.队列仅仅由主机的存储器&磁盘 限制约束,它本质上是一个大的消息缓存器.许多生产者可以发送一个队列的消息,许多消费者可以尝试从一个队列接收数据. 消费者:消费与接受具有相似的含义.一个消费者是一个程序,主要是等待接受信息: 注意:生产者和经济人不必位于同一主机上。实际上,大多数应用程序中却没有.一个应用程序可以是生产者,也可以是消费者. 生产者提供消息 → RabbitMQ → 消费者接受消息 下面我们用 java 得 maven 工程来 演示一下 声明 RabbitMQ 提供了两个 端口号 一个是 5672(TCP协议)用于程序之间的访问 和 一个15672(HTTP协议)用于网页的访问 .pom文件 导入依赖 < parent > < groupId > org.springframework.boot </ groupId > < artifactId >

RabbiMQ重新安装会遇到的错误-SpiritMark

柔情痞子 提交于 2020-01-11 05:16:41
这里只做安装过程中遇到错误的介绍,不喜勿喷,如果对您有帮助右上角关注一下,是对我最大的肯定 重新安装的注意事项: 先卸载RabbitMQ,后卸载Erlang RabbitMQ卸载,选择uninstall.exe进行卸载 Erlang卸载,进入按照目录选择Uninstall.exe使用管理员权限运行进行卸载,卸载完成后将erl目录删除,如提示删除不了重启机器之后再进行删除。 先停止RabbitMQ服务 利用管理员权限进入dos命令窗口,执行 sc delete RabbitMQ,移除服务 找到任务管理器,查找epmd.exe进程,然后停止 利用regedit命令进入注册表编辑器。找到在此路径HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\下,将Erlang全部清除。 利用 everything And Listary 工具进行文件查找, 首先查询RabbitMQ,如下图所示,剩余文件可能会比这多,选择进行清理 转到用户文件夹:**C:\ Users \ [username]**,然后删除文件.erlang.cookie。删除 erlang的配置文件 Windows下安装RabbitMQ (1):下载 erlang ,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,就像 开发Java需要安装JDK一样 下载地址: erlang ,双击

kafka原理深入研究 (转 )

让人想犯罪 __ 提交于 2020-01-11 01:24:57
转载自:https://www.cnblogs.com/xifenglou/p/7251112.html 一、为什么需要消息系统 1.解耦:  允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2.冗余:   消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 3.扩展性:   因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。 4.灵活性 & 峰值处理能力:   在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。 5.可恢复性:   系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 6.顺序保证:   在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。(Kafka 保证一个

centos7 安装 rabbitmq

拟墨画扇 提交于 2020-01-11 00:00:21
1、wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm 2、rpm -Uvh erlang-solutions-1.0-1.noarch.rpm 3、yum install epel-release 4、yum install erlang 5、wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm 6、yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm 完成后启动服务: 7、service rabbitmq-server start 可以查看服务状态: 8、service rabbitmq-server status 9、rabbitmq-plugins enable rabbitmq_management 10、curl http://localhost:15672 打开15672端口 11、firewall-cmd –add-port=15672/tcp –permanent 打开5672端口 12、firewall-cmd –add-port=5672/tcp –permanent

SpringBoot整合RabbitMQ入门学习(一)

为君一笑 提交于 2020-01-10 20:48:28
SpringBoot整合RabbitMQ入门学习(一) 一、前言  本文使用SpringBoot整合了RabbitMQ,并给出极简的例子是来展示RabbitMQ的最常见和最基础的用法。  相关名词解释: Exchange : 交换机 ,每个交换机可以有多个列队,每个交换机只能对应一个路由规则。 Queue : 消息队列 ,RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue中,消费者可以从Queue中获取消息并消费。同一个队列中的消息只会被消费一次。 RoutingKey : 路由Key ,消费发送者将消息发送出去时,一般会绑定一个路由key,路由key可以指定某些特定的消息接收者。 路由规则 : RabbitMQ中有4中路由规则(fanout, direct, topic, headers) fanout :fanout模式,广播模式,凡是绑定了这个路由器的所有队列,都会接收消息,无论有没有指定路由key,无差别接收。 direct :direct模式,完全匹配路由key,非完全匹配的key不会接收到消息。 topic : topic模式不同于direct的严格匹配,topic使用*,#可以做到模糊匹配 headers : 几乎不用,详细问度娘。 几种模式图解 二、Docker安装RabbitMQ 1. docker pull rabbitmq

进程与线程

核能气质少年 提交于 2020-01-10 13:26:26
文章目录 进程与线程 进程通信 无名管道: 命名管道:FIFO 消息队列: 信号量: 共享内存: Socket通信: 线程之间的同步 互斥锁:互斥锁就是一种锁机制 条件变量 读写锁 自旋锁 信号量 总结: 进程与线程 概念:什么是线程:是操作系统能够进行运算调度的最小单位。什么是进程:是计算机中某一次数据集合的运行活动,是操作系统分配资源的最小单位。线程依赖于进程,进程就是线程的容器。 上面的描述比较官方,我的理解就是:想要通过计算机来完成某件事件那么你就得有一个进程来帮助你完成这个任务,也就是说,进程等价于利用计算机完成任务的一种手段,操作系统会为进程去分配各种资源,内存什么的,那么线程就是把进程分配成一个个小任务去执行,也就是说是进程执行的最小单位。 两个问题: 进程就是一个个跑在操作系统上的程序,那么如果想让两个进程或者多个进程之间通信怎么办? 线程是进程运行的最小单位,那么如果两个线程用到了同一个资源,怎么进行同步,否则这个资源的使用就乱套了 也就是说:进程要解决通信问题,否则就是单击小程序,线程要解决同步问题,也就是资源共享在线程中的问题。 进程通信 在Linux中进程通信有六种基本的方式: 无名管道: 是一种不属于任何文件系统的特殊文件,可以使用read和write 原型 #include <unistd.h>2 int pipe(int fd[2]); // 返回值

CentOS7.2安装RabbitMQ笔记

谁说我不能喝 提交于 2020-01-10 12:26:28
身为.NET程序员,用着宇宙级IDE,干什么事都变得越来越懒了,Windows操作系统在手,能通过桌面点点点的方式何必找其他罪受呢。。于是RabbitMQ自然而然也就跑在Windows上了,说实话Windows配置RabbitMQ太恶心了,尤其对于手贱的人,总想着装了卸卸了装,慢慢的各种问题就出来了,不从装系统解决起来备受煎熬。。当然服务器上肯定不这么干,但自己电脑肯定不知不觉的瞎折腾,然后就比如安装的时候报这种问题: 重装系统肯定是不可能的- -征战这么久的电脑,桌面上的东西都懒得整理。。 Docker说实话真是个好东西,RabbitMQ镜像一拉分分钟就玩起来了,但Docker毕竟也有局限性,baidu查一下数据库不适合容器化大致能读到点弊端,队列同理。 最近又回过头来把RabbitMQ搞到CentOS上也是为了节约成本提升性能, RabbitMQ配置 里存在一个hipe_compile的属性,它的描述如下: 醒目的20-50%性能提升不是一点点的诱惑,然而蛋疼的是默认不开启,而且很不友好的强调了下。。不支持Windows平台。。所以搞吧。。 安装erlang 先下载最新的erlang安装包,可以上 官网下载页面 下载后扔到CentOS服务器上也可以服务器本地通过命令行下载 wget http://erlang.org/download/otp_src_19.3.tar.gz

Spring Boot2.X整合消息中间件RabbitMQ原理简浅探析

半世苍凉 提交于 2020-01-10 09:35:00
目录 1、简单概述RabbitMQ重要作用 2、简单概述RabbitMQ重要概念 3、Spring Boot整合RabbitMQ 前言 RabbitMQ是一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件最主要的作用还是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。 @ 1、简单概述RabbitMQ重要作用 首先谈谈作用,你知道它有啥用才会有兴趣去知道它的重要概念,走进它,亲近它!上面已经提过了RabbitMQ主要是用来实现程序的异步和解耦。这里也主要讲解它是如何做到异步和解耦的。 1.1、异步 对比一下使用消息队列实现异步的好处: 1.2、解耦 至于解耦只能靠自己的对耦合的理解,这里就以文字的形式概述: 以上面消息队列实现异步场景分析:主线程依旧处理耗时低的入库操作,然后把需要处理的消息写进消息队列中,这个写入耗时可以忽略不计,非常快,然后,独立的发邮件子系统,和独立的发短信子系统,同时订阅消息队列,进行单独处理。处理好之后,向队列发送ACK确认,消息队列整条数据删除。这个流程也是现在各大公司都在用的方式,以SOA服务化各个系统

白面系列 kafka

别等时光非礼了梦想. 提交于 2020-01-10 08:11:01
kafka是一个分布式发布订阅消息系统,也可叫做MQ系统,MQ是Message Queue,消息队列。 通俗点,生产者往队列里写消息,消费者从队列里读。专业点,Producer通过TCP协议发送消息到Kafka集群,Kafka集群再将这些消息提供给Consumer。 消息是由key、value、时间戳构成,按topic分类。工作中经常听到的topic,就是这个topic,用来给消息分类。 整体流程如官网画的图所示。 kafka有个Broker的概念,指的就是集群中的服务器,每一个服务器就是一个代理(Broker)。 消费者往往按需分成多个组,称为消费者组(consumer group)。 kafka通过topic的partition来解决消息异步传递造成并行消费的问题。 每个partition有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。若Leader down掉了,从follower中产生新的Leader。一个Broker可能同时是一个分区的leader,另一个分区的follower。 生产者发topic发哪个分区呢?最简单的方式是从分区列表中轮流选择。也可以按特定算法来选分区。 消息有2种模式,队列式和发布-订阅式。队列,一条消息只有1个消费者处理。发布-订阅,消息广播给所有消费者