消息队列

ActiveMQ消息中间件与JMS

大城市里の小女人 提交于 2019-12-17 00:04:19
一.什么是消息中间件 二.消息中间件的使用场景 1.解耦 2.流量消锋: 3.异步处理: *.消息通讯 搭建ActiveMQ 三、JMS简介 1.什么是JMS 2. JMS消息传递类型 一.什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者) 常见的消息中间件产品: (1)ActiveMQ ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现。 (2)RabbitMQ AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。 (3)ZeroMQ 史上最快的消息队列系统 (4)Kafka Apache下的一个子项目。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统。适合处理海量数据。 二.消息中间件的使用场景 消息中间件一般使用场景有3个: 1.解耦 2.流量消锋 3.异步处理 (*)消息通讯 1.解耦

Go实现海量日志收集系统(二)

天大地大妈咪最大 提交于 2019-12-16 23:33:26
一篇文章主要是关于整体架构以及用到的软件的一些介绍,这一篇文章是对各个软件的使用介绍,当然这里主要是关于架构中我们agent的实现用到的内容 关于zookeeper+kafka 我们需要先把两者启动,先启动zookeeper,再启动kafka 启动ZooKeeper:./bin/zkServer.sh start 启动kafka:./bin/kafka-server-start.sh ./config/server.properties 操作kafka需要安装一个包:go get github.com/Shopify/sarama 写一个简单的代码,通过go调用往kafka里扔数据: package main import ( "github.com/Shopify/sarama" "fmt" ) func main() { config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll config.Producer.Partitioner = sarama.NewRandomPartitioner config.Producer.Return.Successes = true msg := &sarama.ProducerMessage{} msg.Topic = "nginx_log"

rabbitMq使用学习笔记

假装没事ソ 提交于 2019-12-16 23:23:24
rabbitmq的工作原理: MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛。RabbitMQ官方地址:http://www.rabbitmq.com/ 开发中消息队列通常有如下应用场景: 1、任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。 2、应用程序解耦合 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。 为什么使用RabbitMQ呢? 1、使得简单,功能强大。 2、基于AMQP协议。 3、社区活跃,文档完善。 4、高并发性能好,这主要得益于Erlang语言。 5、Spring Boot默认已集成RabbitMQ 了解amqp和jms JMS是java提供的一套消息服务API标准,其目的是为所有的java应用程序提供统一的消息通信的标准,类似java的 jdbc,只要遵循jms标准的应用程序之间都可以进行消息通信。它和AMQP有什么 不同,jms是java语言专属的消 息服务标准,它是在api层定义标准,并且只能用于java应用;而AMQP是在协议层定义的标准,是跨语言的

认识RabbitMQ

纵饮孤独 提交于 2019-12-16 23:23:08
1.RabbitMQ 介绍 1.1应用场景 MQ全称Message Queue,即消息队列,Rabbit Mq使用erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,是一种应用程序之间的通信的方法,消息队列在分布式系统开发中应用非常广泛。 其官网地址:http://www.rabbitmq.com a、任务异步处理: 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高应用 程序的相应时间。 b、应用程序解耦合 mq相当于一个中介,生成方通过mq于消费方进行交互,作为两者中间的一个媒介,将应用程序进行解耦合。 c、市场上还有的消息队列 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMq,RocketMq,redis. 2、RabbitMQ工作原理 2.1、RabbitMQ工作原理 下图是RabbitMQ的基本结构: 组成部分说明如下: Broker:消息队列服务进程,此进程包含两个部分Exchange(交换机)和Queue(队列)。 Exchange:消费队列交换机,按一定的规则将消息由路由转发到某个队列,对消息进行过滤转发。 Queue:消息队列,存储消息的队列,消息到达队列后并转发给特定的消费方。 Producer:消息生产方,即生产方客户端

进程通信之消息队列

蓝咒 提交于 2019-12-16 20:58:17
1.什么是消息队列   消息队列以 队列 形式(消息链表)的数据结构存放在系统内核中的,它可用于客户进程与服务进程之间的双向数据流。但是它跟信号量、共享内存一样,都只在系统范围内通信,且其在系统里没有名字,其内容不会自动删除,没有文件描述符。这些缺点导致现代进程通信基本不用它了。尽管如此,但是今天我还是需要了解它。 2.消息的数据类型   首先,在头文件<sys/msg.h>中,定义了我们可用传给消息队列的数据类型: struct msgbuf { long mtype; char mtext[ 1 ]; } mtype是指该消息的类型,区分出不同的消息,我们就可以辨别出消息的来源,比如我们把客户进程的mtype设置为1,服务进程的mtype设置为2,这样我们就可用实现客户进程和服务进程的双向通信了。注意,msgbuf只是一个模板,我们可用根据这个模板,自己定义其它的数据结构传给消息队列,如: struct msgbuf_custom { long mtype; char name[ 256 ]; int age; } 我们自己定义了msgbuf_custom,它可用向消息队列传送字符串的name,整形的age。 3.相关函数    (1). key_t ftok(char * fname, int id)     ftok()的作用是产生一个独一无二的ID

Java-分布式系统---消息中间件

柔情痞子 提交于 2019-12-16 19:10:10
简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平台之间进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。其优点在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以将消息进行传送和转发。是分布式系统中非常重要的组件,主要用来解决应用耦合、异步通信、流量削峰等问题 消息中间件的作用 消息中间件几大主要作用如下: 解耦 降低工程间的强依赖程度,针对异构系统进行适配。在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。通过消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,当应用发生变化时,可以独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 冗余(存储) 有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕

linux消息队列操作

安稳与你 提交于 2019-12-16 18:26:02
对消息队列的操作无非有以下三种类型: 1、 打开或创建消息队列 消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可以; 注:消息队列描写叙述字是由在系统范围内唯一的键值生成的,而键值能够看作相应系统内的一条路经。 2、 读写操作 消息读写操作很easy,对开发者来说,每一个消息都相似例如以下的 数据 结构: struct msgbuf{ long mtype; char mtext[1]; }; mtype成员代表消息类型,从消息队列中读取消息的一个重要根据就是消息的类型;mtext是消息内容,当然长度不一定为1。因此,对于发送消息来说,首先预置一个msgbuf缓冲区并写入消息类型和内容,调用对应的发送函数就可以;对读取消息来说,首先分配这样一个msgbuf缓冲区,然后把消息读入该缓冲区就可以。 3、 获得或设置消息队列属性: 消息队列的信息基本上都保存在消息队列头中,因此,能够分配一个相似于消息队列头的结构(struct msqid_ds,见 附录 2 ),来返回消息队列的属性;相同能够设置该 数据 结构。 消息队列API 1、文件名称到键值 #include <sys/types.h> #include <sys/ipc.h> key_t ftok (char*pathname, char

Kafka知识点整理

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

Kafka 及 PyKafka 的使用

試著忘記壹切 提交于 2019-12-16 17:12:36
1. Kafka    1. 简介     Kafka 是一种分布式的、分区的、多副本的基于发布/订阅的消息系统。它是通过 zookeeper 进行协调,常见可以用于 web/nginx 日志、访问日志、消息服务等。主要应用场景为:日志收集系统和消息系统。     Kafka 的主要设计目标如下:       1. 以时间复杂度为 O(1) 的方式提供持久化能力,即使对 TB 级别以上的数据也能保证常数时间的访问性能。       2. 高吞吐率,即使在十分廉价的机器上也能实现单机支持每秒 100K 条消息的传输。       3. 支持 Kafka Server (即 Kafka 集群的服务器)间的消息分区,及分布式消费,同时保证每个 partition 内的消息顺序传输。       4. 同时支持离线数据处理和实时数据处理    2. Kafka 架构     如上图所示,一个 Kafka 集群由若干producer、若干consumer、若干broker,以及一个zookeeper集群所组成。Kafka通过zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。     Kafka名词解释:  

玩转MQTT-阿里云之MQTT使用

南楼画角 提交于 2019-12-16 14:11:37
引言 前两年买一款物联网控制板,当时把玩了一阵之后,验证了下串口通讯、MODBUS协议实现、TCP/UDP/DNS/MQTT通讯(基于GPRS)后,就放到角落里吃灰了呵。 最近收到阿里云的优惠推送,说是什么每月百万条次使用免费,于是想起了这套吃灰装备,是不是也高大上一把,体验下支持高可用、高并发的阿里云,玩下阿里云的MQTT服务呢? 说干就干。 阿里云服务 许多人对云服务一知半解,以为知道个ECS/云主机,就是云服务的全部了。其实,云服务有许多内容,消息中间件服务也是其中一种。 本次我们要使用的MQTT消息服务也是消息中间件的一种。 笔者所知道的消息中间件 ActiveMQ Aopllo RabbitMQ Kafka RocketMQ 消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景,具体内容园中相关文章不少,笔者不再此献丑了呵。 本文主要对具体实战应用进行说明。 登录阿里云 首先,我们打开阿里云。 https://www.aliyun.com/ 右上角,登录 支持多种方式登录 可用阿里系旗下的淘宝、支付宝、钉钉等帐号登录而无需注册呵,真是方便啊 不过当中,还夹了一个微博登录,不知是什么个情况,本人不用这个,不管也罢。 选择淘宝登录 消息队列MQ 登录阿里云后,找到管理控制台,在如下位置,找到MQ相关服务 阿里云中的产品太多