Biztalk中Host Instance线程控制
最近项目中遇到这样的需求,biztalk需要通过FTP adapter到合作伙伴的FTP服务器上取文件,并且在同一个FTP服务器上有多个路径取不同类型的数据,这样biztalk接收端就要建立多个receive location,每个location对应到一个FTP服务器上的一个路径。FTP服务器还有个限制,对同一个IP同时允许的连接数有限制为10个,而实际上biztalk需要对这个FTP建立的receive location有几十个,如果不加控制的话,很可能超过十个请求同时连接到FTP服务器,超过的连接将会收到超连接数的错误,导致接收失败。
这种情况就要控制到FTP服务器的连接请求在同一时间内限制在十个以内,如何做到这点?
在讨论这个问题前,先要介绍一下host和host instance。
在biztalk中,每个orchestration、receive location和send port都需要指定运行他们的Host,实际上对于receive location和send port是指定handler,而每个handler是跟Host一一对应的。
Host分两类,进程内和独立进程,如果是在biztalk进程内运行的Host叫进程内Host,大多数 biztalk服务都运行在进程内Host。在biztalk进程外进程运行的Host叫独立Host,基本上HTTP和SOAP这类需要外部IIS这类进程接收消息的Request-Response双向接收端口需要使用独立主机。这里只讨论进程内主机。
Biztalk Host是个逻辑上的概念,不能直接使用,与Host相对应的Host instance才是真正运行biztalk orchestration、receive location和send port的实际承载者(有点像类的概念,实例化为对象后才能使用)。在一个biztalk group中可以建立多个Host,在group里的每个biztalk server可以对group里的每个Host在本地建立一个instance,最多只能建一个,也可以不建。
在biztalk运行时,orchestration、receive location和send port都会由指定的Host相应的Host instance进程进行处理。实际上每个biztalk进程内主机就是一个BTSNTSvc.exe服务进程,安装biztalk后,默认有两个主机:进程内host是BizTalkServerApplication,独立主机是BizTalkServerIsolatedHost,在services中可以看到默认进程内主机实例的服务BTSSvc$BizTalkServerApplication,是一个BTSNTSvc.exe进程。如果在biztalk再建一个进程内host和相应的host instance,在services中就会多一个BTSNTSvc.exe服务进程与之相对应。
到此,介绍了host和host instance后,回过头来看一开始的需要控制到同一个FTP的连接数的需求。可以设想,能不能把连接到这个FTP的所有receive location都由同一个host instance服务进程处理,然后在这个服务进程内控制receive location并发数,如果能做到这点就能控制到FTP的同时连接数了。
十分幸运的是,biztalk的运行机制能帮我们实现这个设想。Biztalk 运行时,每个host instance就是一个进程,大家知道,每个进程都可以维护一个(也只有一个)进程池,biztalk就是使用这个进程池将orchestration、receive location或send por的实例作为一个线程放入进程池内运行。Dotnet 2.0的进程池默认最大工作线程数是25,也就是说默认状况下,一个host instance同时并发只能运行25个orchestration、receive location或send port的实例。
基于这个机制,应该可以在运行FTP receive location的那个host instance进程,修改它的最大工作线程为10个,这样,就能控制FTP receive location并发连接数在10个以内,多出来的并发连接请求在线程池外排队,等线程池内有空闲的线程继续运行。
下面是修改host instance的最大线程数的方法。
打开注册表,导航至[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvc$hostinstancename],其中红色部分是要修改的主机实例名。在这个key下新建一个CLR Hosting 的key,然后在这个CLR Hosting key下,建一个MaxWorkerThreads的REG_DWORD的值,值的数据设置为10,这就设置了这个host instance的最大工作线程为10个。如下图:
最后,有一点需要注意:MaxWorkerThreads的值的最小值跟服务器的CPU核心数有关系,即这个值不能小于CPU的核心数,如果这个值小于CPU的核心数,这个host instance的服务进程在下次启动时将出错无法启动。在biztalk中表现为启动这个host instance提示:
在services中,启动相应的服务,提示:
Biztalk中Host Instance线程控制相关推荐
- C#中的多线程-线程同步基础 (控制线程数量)
同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成 锁系统 构成 目的 跨进程? 速度 loc ...
- Linux中的远程访问及控制
文章目录 Linux中的远程访问及控制 SSH远程管理 OpenSSH服务器 ssh原理 公钥传输原理 ssh加密通讯原理 对称加密 非对称加密 配置OpenSSH服务端 登陆 服务端配置 ssh客户 ...
- BizTalk中的英文名词和中文释义
最近研究BizTalk架构,并为书籍搜集整套详细资料,真是累死人了,相同类别的中文书籍10年前有过,此间,BizTalk更新升级无数次了,国内尚无一本相关开发类技术指导.虽说可能此框架不属于轻量级,不 ...
- 在C++程序中添加逻辑流程控制
在C++ 程序中添加逻辑流程控制 问题的引出 在计算机程序中,除了常见的执行流程控制,还有逻辑流程控制:有时,执行流程即为逻辑流程,但在大多数情况下还是有所区别的,例如,假定有一个W ...
- c#中如何跨线程调用windows窗体控件?
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...
- RxJava使用(三)Scheduler 线程控制
前言 在默认情况下,即在不指定线程的情况下,RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件:在哪个线程生产事件,就在哪个线程消费事件. 如果需要 ...
- java中我爱你_Java线程学习(转)
编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看着 ...
- Java里的线程控制
这篇文章接着上篇文章<<java 线程简介>> 写的. http://blog.csdn.net/nvd11/article/details/19118683 上一篇文章提到, ...
- 关于操作系统中进程、线程、死锁、同步、进程间通信(IPC)的超详细详解整理
作者主页:https://www.zhihu.com/people/san-hao-bai-du-ren-79 一.什么是进程?什么是线程? 1.1 进程定义 1.2 线程定义 1.3 ...
最新文章
- php百度地图添加标记,JavaScript API - 自定义标注 | 百度地图API SDK
- 四十六、获得SD卡的大小以及内部的文件信息
- HttpClient 设置不当引发的一次雪崩!
- Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)
- JVM性能调优实践:G1 垃圾收集器介绍篇
- template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档
- c语言函数大全doc,c语言函数大全.doc
- mysql 并发 加锁_MySQL的并发控制与加锁分析
- Android 推荐一个Android系统全系列源码在线阅读网站,Android学习资料,Android各个API使用的网站
- 指针进阶:函数指针的应用场景
- matlab中三维数组,维数转换
- mysql逗号后update_隔mysql逗号
- 2020-10-19 Nvidia与vGPU
- 170929 逆向-Reversing.kr(Ransomware)
- 微信小程序weui的使用
- 苹果设备上的无损音乐alac
- 用计算机投屏图片,手机投屏Windows7电脑图文教程
- banner中居中的page显示完全,其余显示百分之20--仿网易云首页轮播图
- oracle 8i 启动,如何快速启动oracle 8i SQL-Plus?
- 布袋除尘器有关matlab编程,布袋除尘器工作原理结构图及使用注意事项