消息队列

Spring Cloud 2 使用 starter-stream-kafka

梦想的初衷 提交于 2019-12-07 10:53:22
spring-cloud-starter-stream-kafka 2.X的配置很少有被讲到,但这又是springcloud架构中很重要的一块,这里做一下介绍使用,抛砖引玉。 关于新的配置项可以查询m2文件夹下的路劲: .m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.3.RELEASE\spring-boot-autoconfigure-2.1.3.RELEASE.jar!\META-INF\spring-configuration-metadata.json 该文件有全面的spring cloud 2配置 项目中的yml配置简单点只需要 spring: application: name: spring-producer kafka: bootstrap-servers: zhy.cauchy8389.com:9092 可以见一个service 用作sender public interface SendService { @Output("myInput") SubscribableChannel sendOrder(); } 然后在controller里面就可以这么使用 @Autowired SendService sendService; @RequestMapping(value

RabbitMQ消息模式2

旧巷老猫 提交于 2019-12-07 10:47:27
1、消费端限流 2、消息的ACK与重回队列 3、TTL消息 4、死信队列 消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据! 消费端限流 RabbitMQ提供的解决方案 RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于Consumer或者Channel设置Qos的值)未被确认前,不进行消费新的消息 Void BasicQos(uint prefetchSize, ushort prefetchCount, bool global); prefetchSize:0 不限制消息大小 prefetchSize:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该Consumer将block(阻塞)掉,直到有消息ack Global:true\false是否将上面设置应用于Channel;简单来说,就是上面限制是Channel级别的还是Consumer级别 注意: prefetchSize和global这两项,RabbitMQ没有实现,暂且不研究; prefetch_count在no_ask=false的情况下生效

kafka详解一、Kafka简介

梦想与她 提交于 2019-12-07 09:06:39
背景: 当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要一个沟通两者的桥梁-消息系统。 从一个微观层面来说,这种需求也可理解为不同的系统之间如何传递消息。 Kafka诞生: 由 linked-in 开源 kafka-即是解决这类问题的一个框架,它实现了生产者和消费者之间的无缝连接。 kafka-高产出的分布式消息系统(A high-throughput distributed messaging system) Kafka特性: 它形容自己的设计是独一无二的,先看一下它有如何过人之处: 快:单个kafka服务每秒可处理数以千计客户端发来的几百MB数据。 可扩展性:一个单一集群可作为一个大数据处理中枢,集中处理各种类型业务 持久化:消息被持久化到磁盘(可处理TB数据级别数据但仍保持极高数据处理效率),并且有备份容错机制 分布式:着眼于大数据领域,支持分布式,集群可处理每秒百万级别消息 实时性:生产出的消息可立即被消费者消费 Kafka的组件: topic:消息存放的目录即主题 Producer

windows消息和消息队列详解

大城市里の小女人 提交于 2019-12-07 07:53:14
windows消息和消息队列 与基于MS - DOS的应用程序不同,Windows的应用程序是事件(消息)驱动的。它们不会显式地调用函数(如C运行时库调用)来获取输入,而是等待windows向它们传递输入。 windows系统把应用程序的输入事件传递给各个窗口,每个窗口有一个函数,称为窗口消息处理函数。窗口消息处理函数处理各种用户输入,处理完成后再将控制权交还给系统。窗口消息处理函数一般是在注册一个窗口的时候指定的。你可以从典型的SDK程序中窗口消息处理函数是怎么声明和实现的。 对于Windows XP系统:如果顶层窗口停止响应消息超过几秒钟,系统会认为窗口无回应。在这种情况下,系统将隐藏这个窗口,然后生成一个影子(ghost)窗口覆盖在它上面。这个影子窗口具有着相同的Z轴顺序,位置,大小,显示属性。影子窗口允许用户将其移动,调整大小,甚至关闭(关闭的是停止响应的window)。此时只有这几个动作是被允许的,在调试模式下,系统不会生成影子窗口。 本节讨论以下主题: Windows消息 1. 消息类型 2. 消息传递 3. 消息处理 4. 消息过滤 5. post message和send message 6. 消息死锁 7. 广播消息 8. 查询消息 1. Windows消息 windows通过消息的形式向窗口传递用户输入。消息可以由系统和应用程序生成

linux上的进程通信学习笔记

大城市里の小女人 提交于 2019-12-07 00:17:42
参考资料 <<精通Linux C编程>> http://man7.org/linux/man-pages/man2/open.2.html https://www.cnblogs.com/52php/p/5840229.html 在 Android中的Handler的Native层研究 文章中研究一下一把Linux中的匿名管道的通信机制,今天这里Linux中的进程间通信补齐。 在Linux中,实现进程通信的方法包括管道(匿名管道和具名管道),消息队列,信号量,共享内存,套接口等。消息队列,信号量,共享内存统称为系统的(POSIX和System V)IPC,用于本地间的进程通信,套接口(socket)则运用于远程进程通信。 各个通信机制定义如下: 匿名管道(Pipe)和具名管道(named pipe):匿名管道用于具有亲缘关系进程间的通信,具名管道克服了管道没有名字的限制,因此除了具有匿名管道的功能外,还允许在无亲缘关系的进程中进行通信。 消息队列(Message):消息队列为消息的链接表,包括POSIX消息队列和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读取队列中的消息。 共享内存:是的多个进程可以访问同一块内存空间,是最快的可以IPC形式。是针对其他的通信机制运行效率较低而设计出来的。往往与其他通信机制,如信号量结合使用

posix消息队列概述以及限制

心已入冬 提交于 2019-12-07 00:17:13
消息队列可以当做一个消息链表,不同于FIFO和管道,某个进程往一个消息队列写入消息之前,不需要另外进程在该队列上等待消息的到达。 对posix消息队列的读总是返回最高优先级的最早消息。 常用函数: 创建或者打开一个消息队列: #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For mode constants */ #include <mqueue.h> mqd_t mq_open(const char *name, int oflag); mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr); 关闭消息队列: #include <mqueue.h> int mq_close(mqd_t mqdes); 删除消息队列: posix消息队列具备随内核的持续性,就是说即使当前没有进程打开某个消息队列,该队列上的消息也将一直存在。 #include <mqueue.h> int mq_unlink(const char *name); 要真正的删除一个消息队列得这样:调用mq_unlink并让它的引用计数(close一次减少1)达到0。 获取消息队列属性: #include <mqueue.h>

浅析Android中的消息机制

[亡魂溺海] 提交于 2019-12-06 23:46:31
在分析Android消息机制之前,我们先来看一段代码: 01 public class MainActivity extends Activity implements View.OnClickListener { 02 03 private TextView stateText; 04 private Button btn; 05 06 @Override 07 public void onCreate(Bundle savedInstanceState) { 08 super.onCreate(savedInstanceState); 09 setContentView(R.layout.main); 10 stateText = (TextView) findViewById(R.id.tv); 11 btn = (Button) findViewById(R.id.btn); 12 13 btn.setOnClickListener(this); 14 } 15 16 @Override 17 public void onClick(View v) { 18 new WorkThread().start(); 19 } 20 21 //工作线程 22 private class WorkThread extends Thread { 23 @Override 24

对Android Handler Message Looper常见用法,知识点的一些总结

筅森魡賤 提交于 2019-12-06 23:46:17
Android 非UI线程中是不能更新UI的,Handler是Android 提供的一套更新UI的机制,也是用来发送消息和处理消息的一套机制。 以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler常见用法,知识点总结一下。 先看一下谷歌Android官方文档对Handler的描述: Class Overview A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue . Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they

RabbitMQ基础概念详细介绍

蹲街弑〆低调 提交于 2019-12-06 22:52:19
转至: http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: Python 、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。

RabbitMQ基础知识详解

送分小仙女□ 提交于 2019-12-06 22:51:02
什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。 RabbitMQ是MQ的一种。下面详细介绍一下RabbitMQ的基本概念。 1、队列、生产者、消费者 队列是RabbitMQ的内部对象,用于存储消息。生产者(下图中的P)生产消息并投递到队列中,消费者(下图中的C)可以从队列中获取消息并消费。 多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。 2、Exchange、Binding 刚才我们看到生产者将消息投递到队列中,实际上这在RabbitMQ中这种事情永远都不会发生。实际的情况是,生产者将消息发送到Exchange(交换器,下图中的X),再通过Binding将Exchange与Queue关联起来。 3、Exchange Type、Bingding key、routing key 在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key。在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key。 生产者在将消息发送给Exchange的时候,一般会指定一个routing