消息队列

SpringBoot实战(十四)之整合KafKa

依然范特西╮ 提交于 2020-01-24 05:42:05
本人今天上午参考了不少博文,发现不少博文不是特别好,不是因为依赖冲突问题就是因为版本问题。 于是我结合相关的博文和案例,自己改写了下并参考了下,于是就有了这篇文章。希望能够给大家帮助,少走一些弯路。 一、KafKa的介绍 1.主要功能 根据官网的介绍,ApacheKafka®是 一个分布式流媒体平台 ,它主要有3种功能:   a.发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因。   b.以容错的方式记录消息流,kafka以文件的方式来存储消息流。   c.可以再消息发布的时候进行处理。 2.使用场景 a.在系统或应用程序之间构建可靠的用于传输实时数据的管道,消息队列功能。 b.构建实时的流数据处理程序来变换或处理数据流,数据处理功能。 3.详细介绍 Kafka目前主要作为一个分布式的发布订阅式的消息系统使用,下面简单介绍一下kafka的基本机制 消息传输过程: Producer 即生产者,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic,上图展示了两个producer发送了分类为topic1的消息,另外一个发送了topic2的消息。 Topic 即主题,通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的Topic中的消息 Consumer 即消费者,消费者通过与kafka集群建立长连接的方式

关于RabbitMQ Queue Argument的简介

北城以北 提交于 2020-01-24 04:12:22
1.Message TTL message在队列queue中可以存活多长时间,以毫秒为单位;发布的消息在queue时间超过了你设定的时间就会被删除掉。 channel.queueDeclare("test", true, false, false, new HashMap<String, Object>()); 2.Auto expire auto expire 设置当前的queue在指定的时间内,没有consumer、basic.get也就是未被访问,就会被删除。 3.MaxLength与MaxLength bytes Max Length(x-max-length): 限定队列的消息的最大值长度,超过指定长度将会把最早的几条删除掉, 类似于mongodb中的固定集合,例如保存最新的100条消息, Feature=Lim Max Length Bytes(x-max-length-bytes): 限定队列最大占用的空间大小, 一般受限于内存、磁盘的大小, Features=Lim B Dead letter exchange(x-dead-letter-exchange): 当队列消息长度大于最大长度、或者过期的等,将从队列中删除的消息推送到指定的交换机中去而不是丢弃掉,Features=DLX 4.dead letter exchange与dead letter

RabbitMQ 通信过程

风格不统一 提交于 2020-01-24 04:10:09
Rabbit MQ的通信过程 MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,是消费-生产者模型的典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息,这点可以与数据结构中队列的作用相类似,具有FIFO的特点。 RabbitMQ是MQ产品的典型实现,是基于AMQP协议可复用的企业消息系统。业务上,可以实现服务提供者和消费者之间的数据解耦,提供高可用性的消息传输机制,在实际生产中应用相当广泛。 本文意在介绍Rabbitmq的基本原理,包括rabbitmq基本概念,组件的基本用途,通信过程等。 一:基本概念 先看 图片: 1.Message: 消息,是有消息头和消息体组成的。消息体是不透明的,消息体是由一些可选属性组成的,包括路由键(routing-key)、优先级(priority)、持久性存储(delivery-mode)等 2.Publisher: 消息生产者,是向交换器发送消息的客户端程序,我们可以简单理解为就是一个Java程序 3.Exchange: 交换器,用来接收生产者发送的消息,并将这些消息路由发送给服务器中的队列。消息要先经过交换器,再到队列中去。 常见的三种交换器类型: direct: 发布与订阅,完全匹配 。我们可以简单理解为一对一的关系,一个交换器将消息发送给一个队列,是完全匹配的

Window10下RabbitMQ安装图文教程

≯℡__Kan透↙ 提交于 2020-01-24 03:50:44
一、erlang下载安装 1、下载 下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就好。 百度网盘下载: 链接:https://pan.baidu.com/s/1rOPj2AlxVp1rzEBw7iacGw 密码:9t3j 2、安装 一直next就可以,不再描述 3、配置环境变量 安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录。 同将%ERLANG_HOME%\bin加入到Path中 4、验证是否成功 最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功。 二、RabbitMQ下载安装 1、下载 RabbitMQ官网下载地址 百度网盘下载(会更快点) 链接:https://pan.baidu.com/s/1vzVZdffoNUvv_ZPC5qEVqA 密码:qw9a 进入下载页面: 选择对应的下载链接: 2、安装(安装路径不能有空格) 默认的安装路径是由空格的,请注意:最新版本的3.7.4是无需理会安装空格的。 三、激活 RabbitMQ’s Management Plugin 1、激活 安装RabbitMQ-Plugins,这个相当于是一个管理界面

RabbitMQ核心组件及应用场景

雨燕双飞 提交于 2020-01-24 01:54:03
一、适用场景 1.解耦 2.最终一致性 3.广播 4.错峰与流控(秒杀业务用于流量削峰场景) 秒杀场景 二、核心组件,关键点(交换器、队列、绑定) AMPQ消息路由必要三部分:交换器、队列、绑定。 Java核心组件:ConnectionFactory、Connection、Channel、Delivery、DeliverCallback、CancelCallback 队列 1. 建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); 2. 声明队列 如果在同一条信道上订阅了另一个队列,那就不能再声明队列,必须先取消订阅。 Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,

rabbitMQ队列使用及常用命令

房东的猫 提交于 2020-01-24 00:47:01
一、RabbitMQ常用命令 启动监控管理器: rabbitmq-plugins enable rabbitmq_management 关闭监控管理器: rabbitmq-plugins disable rabbitmq_management 启动rabbitmq: rabbitmq-service start 关闭rabbitmq: rabbitmq-service stop 查看所有的队列: rabbitmqctl list_queues 清除所有的队列: rabbitmqctl reset 关闭应用: rabbitmqctl stop_app 启动应用: rabbitmqctl start_app 用户和权限设置(后面用处) 添加用户: rabbitmqctl add_user username password 分配角色: rabbitmqctl set_user_tags username administrator 新增虚拟主机: rabbitmqctl add_vhost vhost_name 将新虚拟主机授权给新用户: rabbitmqctl set_permissions -p vhost_name username '.*' '.*' '.*' 角色说明 none 最小权限角色 management 管理员角色 policymaker 决策者

redis安装等

偶尔善良 提交于 2020-01-24 00:37:38
redis安装 https://github.com/MSOpenTech/redis/releases 选择64位 打开安装位置输入redis-server.exe redis.windows.conf (或者放到环境变量),后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的 这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。 切换到 redis 目录下运行:redis-cli.exe -h 127.0.0.1 -p 6379 设置获取键值对 set myKey abc get myKey 输入 info 命令可看到该redis的版本 学习链接: https://zhuanlan.zhihu.com/p/52931220 SSM理论: SSM框架,是Spring+SpringMVC+Mybatis的缩写,是继承SSH框架之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级的应用系统 RabbitMQ RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。 来源: CSDN

五、kafka_2.9.2-0.8.1集群搭建

半腔热情 提交于 2020-01-23 23:26:44
①为什么要搭建kafka集群 主要是在项目后期,要做一个实时计算的模块,实时数据都是从kafka集群里面读取,kafka就是一个分布式的消息队列,kafka搭建的底层基于zookeeper,zookeeper在 四、zookeeper-3.4.5-cdh5.3.6集群搭建 已经搭建好了。 ②安装scala2.11.4 1、利用WinSCP软件将scala-2.11.4.tgz文件拷贝到虚拟机sparkproject1的/usr/local/路径。 2、对scala-2.11.4.tgz进行解压缩,在虚拟机sparkproject1的local目录下输入:tar -zxvf scala-2.11.4.tgz 然后在local目录下输入:ll 删除scala-2.11.4.tgz文件,在local目录下输入:rm -rf scala-2.11.4.tgz 再输入:ll,发现只有scala-2.11.4文件夹,文件scala-2.11.4.tgz已经删除。 3、对scala目录进行重命名,在虚拟机sparkproject1的local目录下输入:mv scala-2.11.4 scala 然后输入:ll,进行检查。 4、配置scala相关环境变量 在虚拟机sparkproject1的local目录,输入:vi ~/.bashrc 输入键盘 i 键 ,插入内容: export SCALA

RabbitMQ(4) 未路由的消息、TTL和死信

北慕城南 提交于 2020-01-23 23:05:48
未路由的消息 当生产这发送的消息到达指定的交换器后,如果交换器无法根据自身类型、绑定的队列以及消息的路由键找到匹配的队列,默认情况下消息将被丢弃。可以通过两种方式 处理这种情况,一是在发送是设置mandatory参数,二是通过备份交换器。 设置mandatory参数 在发送消息是,可以设置mandatory参数未true,这样当消息在交换器上无法被路由时,服务器将消息返回给生产者,生产者实现回调函数处理被服务端返回的消息。 public class NoRouteMessage { private static String QUEUE = "unreachable_queue"; private static String EXCHANGE = "unreachable_exchange"; private static String BINDING_KEY = "fake_key"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory cf = new ConnectionFactory(); Connection connection = cf.newConnection(); Channel channel = connection

RabbitMQ延时任务

╄→尐↘猪︶ㄣ 提交于 2020-01-23 23:04:21
概念: 消息的TTL(Time To Live) 消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。 如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。 可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是一样的效果。 消息扔到队列中后,过了设置的限定时间,如果没有被消费,它就死了。不会被消费者消费到。这个消息后面的,没有“死掉”的消息对顶上来,被消费者消费。 死信在队列中并不会被删除和释放,它会被统计到队列的消息数中去 。单靠死信还不能实现延迟任务,还要靠Dead Letter Exchange。 Dead Letter Exchanges Exchage的概念在这里就不在赘述,可以从这里进行了解。 一个消息在满足如下条件下,会进死信路由,记住这里是路由而不是队列,一个路由可以对应很多队列。 1. 一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。 2.