消息队列

消息中间件(RabbitMQ)04

有些话、适合烂在心里 提交于 2020-01-01 15:16:31
一、rabbitmq实现了AMQP协议 AMQP是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。主要实现有 RabbitMQ。 二、AMQP包含的要素 生产者 :消息的创建者,发送到rabbitmq; 消费者 :连接到rabbitmq,订阅到队列上,消费消息,持续订阅(basicConsumer)和单条订阅(basicGet). 消息: 包含有效载荷和标签,有效载荷指要传输的数据,,标签描述了有效载荷,并且rabbitmq用它来决定谁获得消息,消费者只能拿到有效载荷,并不知道生产者是谁。 信道 ,概念:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用 (为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能

Kafka基础

南笙酒味 提交于 2020-01-01 14:26:14
Kafka简介 根据官网介绍,kafka主要有3种功能 发布和订阅消息流,类似于一个消息队列; 以容错的方式记录消息流,它以文本的方式来存储流; 可以在消息发布的时候就进行处理; 使用场景 构建实时的数据流管道; 构建实时的数据流应用,可以转换和响应数据流; 流处理、流传输 kafka组件 producer::消息和数据的生产者,向kafka的一个topic发布一个消息的进程、代码、服务 consumer::消费者,订阅数据并且处理其发布的消息的进程、代码、服务 consumer group::逻辑概念,对于同一个Topic,会广播给不用的Group, 一个group,只有一个consumer可以消费该消息 broker::物理概念,kafka集群中的每个kafka节点 topic:逻辑概念,kafka消息的类别,对数据进行区分,隔离 Partition:物理概念,kafka下数据存储的基本单元。一个topic数据会被分散存储到多个Partition,每一个Partition是 有序的 replication::同一个partition可能会有多个replica(副本),多个replica之间数据是一样的     当集群中有Broker挂掉,系统可以主动使Replicas提供服务 replication leader

RabbitMq 六种工作模式

ぐ巨炮叔叔 提交于 2019-12-31 23:15:37
1.1 simple 简单模式 1. 消息生产者将消息放入队列中 2 消费者监听消息队列,如果队列中有消息,就消费掉,消息消费掉后,在队列中删除(弊端,消费者消费失败,消息删除) 1.2 work工作模式(竞争资源) 一个生产者被多个消费者竞争消费(高并发的情况下,回产生某个消息被重复消费,可设置一个开关) 1.3 publish/subscribe 发布订阅(共享资源) x代表交换机 生产者将消息发送到x交换机中,交换机将消息发布到所有的队列中,供给队列中的消费者使用 1.4 routing 路由模式 ·生产者将消息发送到交换机,交换机根据路由判断,路由是字符串,交换机根据路由的key,匹配路由key对应的消息队列,对应的消费者才能消费 1.5 topic主题模式 类似于一种模糊匹配 # 代表一个单词 #*代表多个单词 来源: CSDN 作者: zrz梦想起航 链接: https://blog.csdn.net/u010023147/article/details/103777693

生产者消费者模型——wait/notify/notifyAll使用

喜你入骨 提交于 2019-12-31 03:31:02
告警系统架构如下 1、 数据处理系统处理完原始数据并入库后,发送消息到kafka系统; 2、 告警生产者从kafka系统查询消息存入告警消息队列; 3、 告警消费者从告警消息队列查询消息进行处理。 这显然是生产者消费者模型,一个告警消息生产者,多个告警消息消费者。生产者生产消息过快会产生消息积压,生产者生产消息过慢不能充分利用硬件资源。所以必须要生产者和消费者协同处理,使得系统充分利用。具体做法是消息队列为空时,消费者通知生产者生产消息,生产者生产好消息后,通知消费者处理消息。Java中我们使用的对象锁以及wait/notify方法进行线程通信,原理如下: 生产者——循环(获取锁synchronized,释放锁wait(等待被唤醒),生产消息) 消费者——循环(获取锁,消息空则notify/消息不空则消费消息) 消息队列代码: package com.coshaho.threadpool; import java.util.ArrayList; import java.util.List; /** * 消息队列 * @author coshaho */ public class MessageQueue { List<String> messageList = new ArrayList<String>(); public boolean isEmpty() { return

初冬太冷?圣诞无处可去?那跟我一起来学Android吧

*爱你&永不变心* 提交于 2019-12-30 23:55:28
又到年底了,每到这个时候,我们都会慢慢反思,这一年都做了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗?况且今年的互联网环境太差,需要自己有足够的知识储备,才能够应对这凌冽的寒风。 本文主要是整理了中高级安卓需要会的(或者说面试被频繁问到的内容),主要作为参考大纲,之后会陆续更新每个详细部分,供大家参考,互相学习。 面试板块(PDF版如下): BAT面试合集(Binder,组件化插件化,热修复,AOP,QQ换肤,虚拟机,https,线程池原理,音视频原理) 算法合集(Hash,KMP 等) 中小厂面试合集(内存泄漏,Handler,View,MVC.MVP.MVVM,) 大厂相关更新技术(Glide,数据库,NDK) 面试小知识(java小知识) 设计模式(设计模式原则和分类) 数据结构(数据结构等等) 网络编程(三次握手和四次握手,Volley,OKHttps,Retrofit) 源码解析(属性动画实现原理等) 多线程解析(线程同步,进程线程) 性能优化(Webview,内存泄漏和内存溢出等) ( 顺手留下GitHub链接,需要获取相关面试或者面试宝典核心笔记PDF等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS 一丶设计模式与使用场景 (如)建造者模式: 将一个复杂对象的构建与它的表示分离

RabbitMQ 客户端开发向导

假装没事ソ 提交于 2019-12-30 14:39:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> AMQP 协议层面的操作通过 Channel 接口实现。Connection 是用来开启 Channel(信道)的,可以注册事件处理器,也可以在应用结束时关闭连接。与 RabbitMQ 相关的开发工作,基本上也是围绕 Connection 和 Channel 这两个类展开的。 连接 RabbitMQ 方式一: ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(USERNAME); factory.setPassword(PASSWORD); factory.setVirtualHost(virtualHost); factory.setHost(ip_address); factory.setPort(Port); Connection conn = factory.newConnection(); 方式二: ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqp://userName:password@ipAddress:portNumber/virtualHost"); Connection conn = factory

RabbitMQ安装与初始配置

和自甴很熟 提交于 2019-12-30 01:26:24
目录 Erlang安装 RabbitMQ安装 启动/关闭/状态查看 访问端口 参考 用户权限管理 用户管理 权限管理 参考 System Limits 参考 日志 本文只讨论linux下的Rabbitmq安装。 Erlang安装 rabbitmq依赖于Erlang,需先安装,推荐安装 rabbitmq/erlang-rpm : #clone源码 git clone https://github.com/rabbitmq/erlang-rpm.git #make cd erlang-rpm make #需要等待较长时间 cd RPMS/x86_64 #其下有两个rpm包 erlang-19.3.6-1.alios6.x86_64.rpm erlang-debuginfo-19.3.6-1.alios6.x86_64.rpm, 选择前者安装 #安装 sudo rpm -ivh erlang-19.3.6-1.alios6.x86_64.rpm RabbitMQ安装 在 官网下载页面 找到和系统版本对应的rabbitmq版本: #安装rabbitmq-server sudo yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm #此时可能报:Requires: socat, 以下是解决方法, 参考:http://www.cnblogs

RabbitMQ配置与安装

杀马特。学长 韩版系。学妹 提交于 2019-12-30 01:25:00
最近这几天身体不舒服,脖子痛的厉害,可能是上月太累了好久没写博客了,之前也说了公司的.Net项目部做了,改用Scale来做,原本想着会用java来搞,所以上个月在拼命的学java,这几天一直脖子不舒服,也就不学了,也一直在追剧,和陈工聊天时也讨论过要不要转java,继续学,考虑了好久决定还是先不折腾了,继续.Net。本来想着再休息一周呢,不过最近脖子好多了,今天正好没事做就研究了下RabbitMQ。 一、下载 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang。 erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.html 二、安装 下载之后先安装erlang后安装rabbitmq,这里我把这两个安装在了D:\Program Files 三、配置 1.使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打开命令窗口: 输入命令:rabbitmq-plugins.bat enable rabbitmq_management 2.重启服务器 net stop RabbitMQ && net start RabbitMQ 此时会出现上面的错误,原来是需要用管理员的角色

RabbitMQ消息队列的高可靠使用

感情迁移 提交于 2019-12-29 20:31:51
整体解决方案   TopicExchange型交换机,会根据RouteKey将消息路由至匹配队列(推模式下,消息将被推送至消费者的监听函数处理),消息流转和路由的示意图如下。 生产端可靠性保障   为防止消息在未发送到Broker前就由于网络原因或其他情况导致丢失,生产者端需要保障消息成功送达中间件,手段一般有两种,一是使用事务机制,但这种做法是非异步的,吞吐量性能较差;另一种是确认机制,本例使用确认机制。 将Channel设为confirm模式,RabbitMQ会在消息到达Exchange后回调生产者ConfirmCallback接口;(如果消息和队列是可持久化的,那么包含msgId的ack会在消息被写入磁盘之后发出) 将Channel设为return模式,若消息没有被路由到任何一个队列,RabbitMQ会回调生产者ReturnCallback接口。 生产端高可靠只能让生产者知道自己投递的消息是否成果到达交换机或某个队列,但是无法知道消费者有没有成功消费。 // 设置消息入队失败回调 rabbitTemplate . setMandatory ( true ) ; rabbitTemplate . setConfirmCallback ( new RabbitTemplate . ConfirmCallback ( ) { @Override public void

Erlang&RabbitMQ服务安装配置

一世执手 提交于 2019-12-29 20:09:00
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用,具体特性还在验证中,待检验。由于项目需要,安装并配置了RabbitMQ,服务器操作系统是CentOS7,服务器是阿里云主机。具体步骤如下:   安装依赖文件:   yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto    1.Erlang安装配置   下载安装包,地址http://www.erlang.org/downloads,我选择的是otp_src_18.3.tar.gz。   然后解压文件: [root@iZ25e3bt9a6Z rabbitmq]# tar -xzvf otp_src_18.3.tar.gz [root@iZ25e3bt9a6Z rabbitmq]# cd otp_src_18.3/   配置安装路径编译代码: [root@iZ25e3bt9a6Z otp_src_18.3]# ./configure --prefix=/opt/erlang   执行编译结果: [root