dispatcher

CAP.DotNet源码追踪(一)消息是如何执行的,执行后又是如何执行回调的

北慕城南 提交于 2020-05-09 15:09:41
CAP源码追踪(一)消息是如何执行的,执行后又是如何执行回调的 场景 .NET Core 3.1 nuget包:DotNetCore.CAP.RabbitMQ 3.0.2 前言 以对话为引,梳理我们的问题: 小明-聪明绝顶的程序猿,小红-绝美程序媛 小红:小明,在CAP中,我们通过 CapSubscribe 特性来订阅方法,而我们写的消息处理中,返回值一般都是void/Task,那么这个返回值类型有什么用呀或者说这个返回值有什么用呢? 小明一看表现的机会来了,马上回复了一句:百因必有果,既然有返回类型这个东西,那么CAP设计者肯定会利用这一点来进行应用,不会无故忽视这个功能的 小红:小明,那它到底有什么作用呢? 小明:既然想知道它的作用,那么就应该去学习它的消息执行原理,分析其执行过程,自然就明白它的返回值的作用了。 小红:哇,问题一下从返回值的作用上升到了CAP执行原理了,小明,快给我讲讲呀😉 小明心想是时候表演真正的技术了~✨ @# *$&( #@*&(^$#@( 正文 从应用层面来看,我们使用CAP主要就是使用它的消息发送和订阅,既然要学习它的执行原理,那么就直接从消息发送出发来学习 MQ发送 以常用情况为例,我们通过注册的 ICapPublisher 下的 PublishAsync 来发送消息 首先先看一下方法定义: Task PublishAsync<T>(string

Windows服务 System.ServiceProcess.ServiceBase类

邮差的信 提交于 2020-05-08 09:30:59
一、Windows服务 1、Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境。 2、无用户界面,任何消息都会写进Windows事件日志。 3、随计算机启动而启动,不需要用户一定登录Windows。 4、通过服务控制管理器,可以终止、暂停及当需要时启动Windows服务。 二、体系结构 System.ServiceProcess命令空间 1、类继承关系: Object Component ServiceBase ServiceController Installer ComponentInstaller ServiceInstaller ServiceProcessInstaller 2、体系结构 第一部分就是服务程序。 实现系统的业务需求。 Service Control Manager(SCM)。SCM是操作系统的一个组成部分(services.exe),作用是于服务进行通信。 SCM包含一个储存着已安装的服务和驱动程序的信息的数据库,通过SCM可以统一的、安全的管理这些信息。 一个服务拥有能从SCM收到信号和命令所必需的的特殊代码,并且能够在处理后将它的状态回传给SCM。 ServiceBase:(服务程序)实现系统的业务需求。 在创建新的服务类时,必须从 ServiceBase 派生。 第二部分服务控制程序, 是一个Service Control

WPF Invoke与BeginInvoke的区别

十年热恋 提交于 2020-05-06 02:49:50
Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。 Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。     就是一个是同步的一个是异步的,也就是一个需要等待一个不需要等待 //这个输出123 private void button1_Click(object sender, RoutedEventArgs e) { textblock.Text += "1"; this.Dispatcher.Invoke(new InvokeDelegate(Test)); textblock.Text += "3"; } private void Test() { textblock.Text += "2"; } private delegate void InvokeDelegate(); //这个输出132 private void button1_Click(object sender, RoutedEventArgs e) { textblock.Text += "1"; this.Dispatcher.BeginInvoke(new InvokeDelegate(Test)); textblock.Text += "3"; } private void

WPF自定义控件——顶级控件

梦想与她 提交于 2020-05-03 15:02:42
原文: WPF自定义控件——顶级控件 作为一个WPF程序员,我最希望看到的是WPF的应用,或者更确切的说是绚丽的应用,虽然限于自身的实力还不能拿出成绩来,但看到别人的作品时,心里还是有很大的宽慰——WPF是可以做出更加动人地产品的,只要你坚定的走下去,带着不满现状的追求走下去。 下图是 Telerik 的WPF控件,我相信很多人也下过他的DEMO,研究过他的代码,并由此激起对WPF的信心。今天我们就来 仿造 他的DragAndDrop做一个自己的控件。 一.Windows的窗体 一般来说我们只要打开Visual Studio 2008依次打开 文件(File)->新建(New)->项目(Project),在弹出的新项目(New Project)窗口中选中Windows中的WPF Application,单击确定(OK)便可以开始我们的WPF之旅。 之后我们按F5或绿色箭头 来运行程序会看到一个空白的窗口。 这太普通,如果你有过桌面程序开发经历,这个或许都不能带起你的任何激情。况且他上面没有任何东西,也就意味着没有向MM们炫耀的资本。当然还有一点最重要的,这个窗体的出现也是在你预期之内的——你理所当然的认为该有这么个窗体,因为里面有一个继承于Window的类,而App.xaml中的StartupUri属性是指向这个类的XAML的,所以他就应该出现? 那么如果我再追问App

idou老师教你学istio30:Mixer Redis Quota Adapter 实现和机制

空扰寡人 提交于 2020-05-02 19:24:00
1. 配置 1.1参数 1.2 Params.Quota 1.3Params.Override 1.4Params.QuotaAlgorithm 速率限制的算法: Fixed Window 算法每个时间间隔对应一个计数器,每当有请求到来,如果此时计数器未达到配额的限定值,则计数器加 1,否则拒绝服务。当进入下一个时间间隔时,计数器失效被重置。该算法的缺点在于不能保证在任意的时间间隔内,速率都被限制在配额以下。即如果请求集中在计数器失效的时间点附近,则在该时间点附近的时间间隔内,速率最大能达到配额的两倍。 Rolling Window 算法通过对上一个时间间隔请求数和当前时间间隔已处理的请求数进行加权,实现了对任意时间间隔的速率的估算。 图片来自 https://blog.cloudflare.com/counting-things-a-lot-of-different-things/ 如上图所示,在上一分钟内处理了 42 个请求,当前这一分钟已经过去了 15 秒,处理了 18 个请求,则当前这一分钟的速率可以估算为: rate = 42 * ((60-15)/60) + 18 = 42 * 0.75 + 18 = 49.5 如果使用 memquota adapter,默认使用亚秒级分辨率的 rolling window 实现速率限制。 如果使用 redisquota adapter

idou老师教你学Istio 27:解读Mixer Report流程

懵懂的女人 提交于 2020-05-02 18:19:11
1、概述 Mixer是Istio的核心组件,提供了遥测数据收集的功能,能够实时采集服务的请求状态等信息,以达到监控服务状态目的。 1.1 核心功能 •前置检查(Check):某服务接收并响应外部请求前,先通过Envoy向Mixer(Policy组件)发送Check请求,做一些access检查,同时确认adaptor所需cache字段,供之后Report接口使用; •配额管理(Quota):通过配额管理机制,处理多请求时发生的资源竞争; •遥测数据上报(Report):该服务请求处理结束后,将请求相关的日志,监控等数据,通过Envoy上报给Mixer(telemetry) 1.2 示例图 2、代码分析 2.1 Report代码分析 本节主要介绍Report的详细流程(基于Istio release1.0.0版本,commit id为3a136c90)。Report是mixer server的一个接口,供Envoy通过grpc调用。首先,我们从mixer server的启动入口main函数看起: func main() { rootCmd := cmd.GetRootCmd(os.Args[1:], supportedTemplates(), supportedAdapters(), shared.Printf, shared.Fatalf) if err := rootCmd

spring boot配置Servlet容器

好久不见. 提交于 2020-05-02 13:13:30
Spring boot 默认使用Tomcat作为嵌入式Servlet容器,只需要引入spring-boot-start-web依赖,默认采用的Tomcat作为容器 01 定制和修改Servlet容器的相关配置(ServerProperties是EmbeddedServletContainerCustomizer的子类) server.port=8080 server.context -path=/ # tomcat相关设置 server.tomcat.uri -encoding=UTF-8 也可以编写EmbeddedServletContainerCustomizer(嵌入式的Servlet容器定制器),来修改servlet容器的配置 @Bean public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){ // 定制嵌入式的Servlet容器相关的属性配置 return container -> container.setPort(8083 ); } 2 注册Servlet容器的三大组件(Servlet Filter Listener) spring boot默认采用是以jar包的形式启动嵌入式的servlet容器,从而启动Springboot的web应用,没有web.xml

Is a dispatcher needed to change data-bound properties in WPF .Net Core 3 or newer?

我的未来我决定 提交于 2020-04-30 06:28:40
问题 A lot of examples (even from MS) use a dispatcher to update data-bound properties and a bunch of different answers could be found. Does an 'official' statement exist? Currently, I always use a dispatcher and I would only change this if I can be sure that this is an official feature and it will still work on future .Net versions. 回答1: I don't believe an official statement exists. However, it generally seems to depend on the type of update that you're doing. If you're updating a normal property

Java 并发基础常见面试题总结

邮差的信 提交于 2020-04-27 02:54:45
Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当前运行的进程(.exe 文件的运行)。 1.2. 何为线程? 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。 Java 程序天生就是多线程程序,我们可以通过 JMX 来看一下一个普通的 Java 程序有哪些线程,代码如下。 public class MultiThread { public static void main ( String [] args ) { // 获取 Java 线程管理 MXBean ThreadMXBean threadMXBean =

[转帖]Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇)

有些话、适合烂在心里 提交于 2020-04-27 02:43:11
Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇) http: // www.postgres.cn/v2/news/viewone/1/454 原作者:姚延栋 创作时间:2019-05-08 17:25:25+08 采编:wangliyun 发布时间:2019-05-09 08:25:28 欢迎大家踊跃投稿,投稿信箱:press@postgres.cn 评论:0 浏览:1620 作者介绍 姚延栋,山东大学本科,中科院软件所研究生。PostgreSQL中文社区委员,致力于Greenplum/PostgreSQL开源数据库产品、社区和生态的发展。 上篇(链接地址: https://mp.weixin.qq.com/s/DI4U8UoddOHBRiJPzwfr-Q )介绍了集群概述、分布式数据存储和分布式查询优化。本篇继续介绍分布式查询执行、分布式事务、数据洗牌和集群管理等方面。 一、分布式执行器 现在有了分布式数据存储机制,也生成了分布式查询计划,下一步是如何在集群里执行分布式计划,最终返回结果给用户。 Greenplum 执行器相关概念 先看一个 SQL 例子及其计划: test=# CREATE TABLE students (id int, name text) DISTRIBUTED BY (id); test=# CREATE TABLE