使用 JointCode.Shuttle 动态注册 / 注销服务

JointCode.Shuttle 是一个用于进程内 AppDomain 间通信的服务架构(不支持跨进程)。

本文将介绍如何使用 JointCode.Shuttle 在运行时动态注册 / 注销服务。

假设我们有一个服务契约 A,使用 JointCode.Shuttle,我们可以在运行时:

  1. 在一个 AppDomain(B)中注册一个服务实现(它实现了服务契约 A),
  2. 在另一个 AppDomain( C)中消费此服务(通过服务契约 A)。
  3. 然后,我们可以在 AppDomain(B)中注销上述服务实现,
  4. 并启动另外一个 AppDomain(D),然后在 AppDomain(D)中另外注册一个实现了相同服务契约 A 的服务,
  5. 在 AppDomain ( B)中再次消费此服务(通过相同的服务契约 A

我为此写了一个简单的示例,以下是运行该示例的程序输出:

可以看到,通过在两个不同的 AppDomain 中 注册/注销 实现了相同服务契约的不同服务实现,我们可以在运行时达到动态切换服务实现的目的。

如果您对示例源码感兴趣,请点击 此处 下载(测试名称:ShuttleDomain服务更新)。

时间: 2024-11-02 16:38:01

使用 JointCode.Shuttle 动态注册 / 注销服务的相关文章

自己动手写RPC框架到dubbo的服务动态注册,服务路由,负载均衡功能实现

RPC即远程过程调用,它的实现方式有很多,比如webservice等.框架调多了,烦了,没激情了,我们就该问自己,这些框架的作用到底是什么,来找回当初的激情. 一般来说,我们写的系统就是一个单机系统,一个web服务器一个数据库服务,但是当这单台服务器的处理能力受硬件成本的限制,是不能无限的提升处理性能的.这个时候我们使用RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了提升. RPC的实现包括客户端和服务端,即服务的调用方和服务的提供方.服务调用方发送rpc请求

RPC原来就是socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化

序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用. RPC即远程过程调用,它的实现方式有很多,比如webservice等.框架调多了,烦了,没激情了,我们就该问自己,这些框架的作用到底是什么,来找回当初的激情. 一般来说,我们写的系统就是一个单机系统,一个web服务器一个数据库服务,但是当这单台服务器的处理能力受硬件成本的限制,是不能无限的提升处理性能的.这个时候我们使用RPC将原来的本地调

JointCode.Shuttle,一个简单高效的跨 AppDomain 通信的服务框架

JointCode.Shuttle 是一个用于 AppDomain 间通信的服务架构. 1. 什么情况下使用 JointCode.Shuttle 在 .net / mono 开发中,一般不太需要使用额外的 AppDomain,但在一些 特定情况下,让代码运行在新的 AppDomain 中也许是一个好的选择. 当代码需要跨越 AppDomain 边界访问另一个 AppDomain 时,便产生了跨 AppDomain 通信的问题,JointCode.Shuttle 正是专为此目的而开发的一个服务框架

关于动态注册dubbo的思路,做法

技术: springboot,maven,dubbo,zookeeper 背景: 项目的功能类似一个中转路由,通过页面可以发送请求,请求到别的项目的接口,大家都知道dubbo接口的服务提供方需要把服务注册到zookeeper上,然后服务消费方获得服务提供方提供的facade包(也就是jar包),可以作为消费者去请求提供方的服务. 这里就有一个问题,dubbo接口的服务,无论是服务提供者还是服务消费者都有几种注册方式,可以查看官网.(为什么我说消费者也是注册,是因为在dubbo-admin中可以看

Windows Server下把BAT批处理注册成服务在后台运行且注销后能正常运行

批处理有如下特点: 1.登录到当前窗口运行时,如果关闭控制台会连同启动的程序一起关闭. 2.如果是以start /b的形式启动,那么同样也是在控制台关闭后者注销当前窗口也会一起关闭. 3.如果以vbs的形式启动,注销当前用户也会一起关闭. 有如下方式解决: 1.使用[任务计划]去启动批处理,里面有很多个触发点,可以选择[计算机启动时]触发也能达到开机启动的效果,而不用登录桌面. 2.有错误启动Windows Service方式,用[sc]命令注册服务,然后以cmd.exe的形式去启动(C:\Wi

动态注册和注销BroadercasterReceive(二)

有时候不需要监听广播是否有消息,所以可以使用动态注册的方式.即不需要再androidmanifest.xml中注册. 主要代码如下: package com.example.yabushan.broadercastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver exte

datasnap——动态注册服务类

datasnap——动态注册服务类 在DataSnap的应用程序时,我们首先需要注册的服务器类,以提供访问客户端应用程序的服务器方法.通常的做法是使用DSServerClass组件,但有些时候,我们要做到在运行时加载.下面代码实现的类TSimpleServerClass从TDSServerClass继承,超载了Create方法并且增加了ServerClass,DataSnap Server和LifeCycle三个参数. type TSimpleServerClass = class(TDSSer

Android学习笔记(十一)BroadcastReceiver动态注册、注销示例

在上一篇博文中简单介绍了一下BroadcastReceiver的相关知识点,本篇举一个在代码中动态的注册.注销BroadcastReceiver的栗子. 1.首先创建一个MyReceiver并继承BroadcastReceiver,既然要动态注册该receiver的话,就无需在AndroidManifest.xml中配置它了: 1 public class MyReceiver extends BroadcastReceiver { 2 public static final String AC

BroadcastReceiver的使用,动态注册和注销,优先级和中断控制

BroadcastReceiver: BroadcastReceiver(广播接收器)是Android中的四大组件之一,用来通知某些事件的相关信息,如下载完成,设置改变等. 默认的BroadcastReceiver状态(新建完未更改任何设置)的简单使用方法: 1.通过new Intnet(MainActivity.this,MyReceiver.class)来启动指明的广播对象,(当manifests中注册了此BroadcastReceiver才能通过这种方法启动) 2.Intent可以通过in