消息队列

RabbitMQ入门介绍以及安装使用

点点圈 提交于 2020-01-30 00:14:28
一、RabbitMQ初识 RabbitMQ是一个实现了高级消息队列协议(AMQP的消息代理(也叫消息中间件),它接受并转发消息。它可以帮你处理一些逻辑的事务,从而进行解耦,比如用户注册落库之后,还需要发送邮件验证、需要发送新人红包等等事情,就可以交给中间件去做。也可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里。在这个例子中,RabbitMQ就相当与投递箱、邮局和邮递员。 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件产品、不同的开发语言等条件的限制。 1.2 典型应用场景 跨系统的异步通信 ,异步、解耦、削峰。 应用内的同步变成异步 秒杀:自己发送给自己 基于Pub/Sub模型实现的事件驱动 ,摒弃ELT(比如全量 同步商户数据); 摒弃API(比如定时增量获取用户、获取产品,变成增量广播)。 利用RabbitMQ实现事务的最终一致性 1.3 RabbitMQ的特性 RabbitMQ使用Erlang语言编写,使用Mnesia数据库存储消息。 可靠性(Reliability) RabbitMQ

消息队列如何处理重复消息

大兔子大兔子 提交于 2020-01-30 00:11:09
一、消息重复现象   在 MQTT 协议中,给出了三种传递消息时能够提供的服务质量标准: At most once:最多一次,这种情况会丢失部分数据,一般日志收集这种对数据不严格的可以使用 At least once:最少一次,这种会导致一条消息重复发送   Exactly once:正好一次,一条消息只会被消费一次   RocketMQ,Rabbit MQ,Kafka都是使用的At least once,虽然消息会重复,但不会丢失。不使用Exactly once这种呢,是因为这种每次发送前发送都要检查这条消息是否已成功发送了,大大降低了MQ的性能。 二、解决方案   那消息重复了,该如何解决呢?一般都是在消费端保证幂等性来解决。   幂等:f(f(x))=f(x),执行多次和执行一次的结果是相同的,这种我们称之为幂等的。   比如现在有个需求:给账户A的余额增加100。   方案一:通过唯一约束控制     1.数据库唯一索引:       流水表中交易订单号和账户建立唯一索引,重复insert的时候违反唯一性,所以只会成功执行一次。     2.redis的setnx       redis中有这个key就不能重复操作   方案二:设置前提条件     1.数据库查询       加分布式锁,然后查询有没有该订单号的流水,没有则可以插入。     2.数据库版本号      

kafka

自作多情 提交于 2020-01-29 22:54:16
Kafka是什么 Apache Kafka是一个开源 消息 系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。 Kafka是一个分布式消息队列:生产者、消费者的功能。 它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。 Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。 无论是kafka集群,还是producer和consumer都依赖于 zookeeper**集群保存一些meta信息,来保证系统可用性 消息队列内部的实现原理 为什么需要消息队列 消息系统的核心作用就是三点:解耦,异步和并行 以用户注册的案列来说明消息系统的作用 用户注册的一般流程 问题 :随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。 用户注册的并行执行 问题**:系统并行的发起了4个请求,4个请求中,如果某一个环节执行1分钟,其他环节再快,用户也需要等待1分钟。如果其中一个环节异常之后

Kafka

﹥>﹥吖頭↗ 提交于 2020-01-29 16:21:59
Kafka架构图 kafka名词解释 在一套kafka架构中有多个Producer,多个Broker,多个Consumer,每个Producer可以对应多个Topic,每个Consumer只能对应一个ConsumerGroup。 整个Kafka架构对应一个ZK集群,通过ZK管理集群配置,选举Leader,以及在consumer group发生变化时进行rebalance。 名称 解释 Broker 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群 Topic 主题,Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic Producer 消息生产者,向Broker发送消息的客户端 Consumer 消息消费者,从Broker读取消息的客户端 ConsumerGroup 每个Consumer属于一个特定的Consumer Group,一条消息可以发送到多个不同的Consumer Group,但是一个Consumer Group中只能有一个Consumer能够消费该消息 Partition 物理上的概念,一个topic可以分为多个partition

RocketMQ 消息队列单机部署及使用

你。 提交于 2020-01-29 09:02:03
转载请注明来源: http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: 《RocketMQ 消息队列单机部署及使用》 《 java编写简单消息队列。实现高德坐标变形服务》 0 RocketMQ简单介绍 0.1 介绍 RocketMQ是一个消息中间件。 消息中间件中有两个角色:消息生产者和消息消费者。RocketMQ里相同有这两个概念。消息生产者负责创建消息并发送到RocketMQ服务器。RocketMQ服务器会将消息持久化到磁盘,消息消费者从RocketMQ服务器拉取消息并提交给应用消费。 0.2 特点 RocketMQ是一款分布式、队列模型的消息中间件,具有下面特点: 支持严格的消息顺序 支持Topic与Queue两种模式 亿级消息堆积能力 比較友好的分布式特性 同一时候支持Push与Pull方式消费消息 历经多次天猫双十一海量消息考验 0.3 部署结构 上图所看到的为RocketMQ的部署结构,图中Meta字样为RocketMQ早期代号。 1 RocketMQ 消息队列单机部署 1.1 系统配置环境 主机:Linux 内存:8G 硬盘:250G CPU:4核 1.2 须要用到的软件包和文档 眼下在Github上可下载最新的安装包alibaba-rocketmq-3.2.6.tar 下载地址: https:/

RabbitMQ的特点以及搭建

☆樱花仙子☆ 提交于 2020-01-29 08:38:18
一、消息队列中间件简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 二、消息队列在实际应用中常用的使用场景 异步处理,应用解耦,流量削锋和消息通讯四个场景 三、什么是RabbitMQ RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。 AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放 标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。 RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 四、RabbitMQ的特点 1.可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。 2.灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个Exchange 绑定在一起

RabbitMQ 队列类型

与世无争的帅哥 提交于 2020-01-29 06:13:43
RabbitMQ 基于AMQP协议, 默认的交换机类型direct,direct 直接转发,fanout广播模式,topic带通配符匹配的广播模式 direct 这种发送消息的模式,是最简单也是rabbitmq默认的一种,直接创建队列向其发送消息,等待监听者消费 // 直接注册一个常规队列,向这个队列发送消息 @Component public class SendMessage { @Bean public Queue getQueues() { return new Queue(RabbitConstant.HELLO_QUEUE); } @Autowired private AmqpTemplate amqpTemplate; public void send() { try { User user = new User(); user.setAddress("地址"); user.setAge("1"); user.setName("mq"); amqpTemplate.convertAndSend(RabbitConstant.HELLO_QUEUE, JSON.toJSONString(user)); } catch (Exception e) { e.getStackTrace(); } } } 这种队列是点对点的发送与接收,一个消息只能被所有监听者中的一个消费 //

进程间通信小结

瘦欲@ 提交于 2020-01-29 02:04:28
进程间通信: 1、进程间的数据共享: 管道、 消息队列、 共享内存、 Unix域套接字 易用性: 消息队列 > Unix域套接字 > 管道 > 共享内存(经常与信号量一起用) 效 率: 共享内存 > Unix域套接字 > 管道 > 消息队列 常 用: 共享内存、Unix域套接字 2、异步通信 信号 3、同步与互斥(做资源保护) 信号量 来源: https://www.cnblogs.com/y4247464/p/12239464.html

kafka性能调优

只愿长相守 提交于 2020-01-28 23:40:24
https://blog.csdn.net/vegetable_bird_001/article/details/51858915 主要优化原理和思路 kafka是一个高吞吐量分布式消息系统,并且提供了持久化。其高性能的有两个重要特点: 利用了磁盘连续读写性能远远高于随机读写的特点; 并发,将一个topic拆分多个partition。 要充分发挥kafka的性能,就需要满足这两个条件 kafka读写的单位是partition,因此,将一个topic拆分为多个partition可以提高吞吐量。但是,这里有个前提,就是不同partition需 要位于不同的磁盘(可以在同一个机器)。如果多个partition位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文 件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。 在linkedlin的测试中,每台机器就加载了6个磁盘,并且不做raid,就是为了充分利用多磁盘并发读写,又保证每个磁盘连续读写 的特性。 具体配置上,是将不同磁盘的多个目录配置到broker的log.dirs,例如 log.dirs=/disk1/kafka-logs,/disk2/kafka-logs,/disk3/kafka-logs kafka会在新建partition的时候,将新partition分布在partition最少的目录上

记c# rabbitmq的使用

只愿长相守 提交于 2020-01-28 18:43:50
  本来项目中使用的是msmq,后来看到一篇文章,有人比较了一下几种消息队列的性能,rabbitmq的性能要高于msmq,并且相对成熟。于是准备把项目中的消息队列换一下。这里写篇文章只为记录rabbitmq的安装、配置以及使用。方便以后自己查看,也算是留个记录。   安装   在windows下面安装rabbitmq很简单,先到rabbitmq的官方网站http://www.rabbitmq.com/去下载最新版即可。安装过程中可能会提醒你安装Erlang,按照提示会跳转到对应的下载页面,下载进行安装就行了。这里基本上就是一路next就可以的,不过需要注意的是,在安装的时候需要使用管理员身份进行安装,否则rabbitmq的在线管理工具是无法启用的。   配置   装好之后还是有一个配置文件需要设置一下的,位置是在%HOMEPATH%\AppData\Roaming\RabbitMQ,你会看到下面已经有一个rabbitmq.config.example文件,不过还需要新建一个rabbitmq.config文件。配置内容可参考 [ {rabbit, [ {loopback_users, [<<"guest">>]}, {tcp_listeners, [{"127.0.0.1", 5672}]} ]} ]. loopback_users