基于Dubbo框架构建分布式服务(三)

我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示:

上图中可以看出,该服务有两个独立的节点可以提供,因为配置的集群模式为failover,如果某个节点的服务发生故障无法使用,则会自动透明地重试另一个节点上的服务,这样就不至于出现拒绝服务的情况。如果想要查看提供方某个节点上的服务详情,可以点击对应的IP:Port链接,示例如图所示:

 

上图可以看到服务地址 

dubbo://10.10.4.125:20880/org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService?actives=100&anyhost=true&application=chatroom-cluster-provider&cluster=failover&dubbo=0.0.1-SNAPSHOT&executes=200&interface=org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService&loadbalance=random&methods=getMaxOnlineUserCount,queryRoomUserCount&pid=30942&queryRoomUserCount.actives=50&queryRoomUserCount.loadbalance=leastactive&queryRoomUserCount.retries=2&queryRoomUserCount.timeout=500&retries=2&revision=0.0.1-SNAPSHOT&side=provider&timeout=1000×tamp=1427793652814&version=1.0.0

如果我们直接暴露该地址也是可以的,不过这种直连的方式对服务消费方不是透明的,如果以后IP地址更换,也会影响调用方,所以最好是通过注册中心来隐蔽服务地址。同一个服务所部署在的多个节点上,也就对应对应着多个服务地址。另外,也可以对已经发布的服务进行控制,如修改访问控制、负载均衡相关配置内容等,可以通过上图中“消费者”查看服务消费方调用服务的情况,如图所示:

也在管理控制台可以对消费方进行管理控制。

  • ●Dubbo监控中心

Dubbo监控中心是以Dubbo服务的形式发布到注册中心,和普通的服务时一样的。例如,我这里下载了Dubbo自带的简易监控中心文件dubbo-monitor-simple-2.5.3-assembly.tar.gz,可以解压缩以后,修改配置文件~/dubbo-monitor-simple-2.5.3/conf/dubbo.properties的内容,如下所示:

 

dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://zk1:2181?backup=zk2:2181,zk3:2181
dubbo.protocol.port=7070
dubbo.jetty.port=8087
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

然后启动简易监控中心,执行如下命令: 

cd ~/dubbo-monitor-simple-2.5.3
bin/start.sh

这里使用了Jetty Web容器,访问地址 http://10.10.4.130:8087/ 就可以查看监控中心,Applications选项卡页面包含了服务提供方和消费方的基本信息,如图所示:

上图主要列出了所有提供方发布的服务、消费方调用、服务依赖关系等内容。

接着,查看Services选项卡页面,包含了服务提供方提供的服务列表,如图所示:

点击上图中Providers链接就能看到服务提供方的基本信息,包括服务地址等,如图所示:

点击上图中Consumers链接就能看到服务消费方的基本信息,包括服务地址等,如图所示:

由于上面是Dubbo自带的一个简易监控中心,可能所展现的内容并不能满足我们的需要,所以可以根据需要开发自己的监控中心。Dubbo也提供了监控中心的扩展接口,如果想要实现自己的监控中心,可以实现接口com.alibaba.dubbo.monitor.MonitorFactory和com.alibaba.dubbo.monitor.Monitor,其中MonitorFactory接口定义如下所示:

 

/**
* MonitorFactory. (SPI, Singleton, ThreadSafe)
*
* @author william.liangf
*/
@SPI("dubbo")
public interface MonitorFactory {/*** Create monitor.* @param url* @return monitor*/@Adaptive("protocol")Monitor getMonitor(URL url);}

 

 

Monitor接口定义如下所示:

Monitor接口定义如下所示:

/**
* Monitor. (SPI, Prototype, ThreadSafe)
*
* @see com.alibaba.dubbo.monitor.MonitorFactory#getMonitor(com.alibaba.dubbo.common.URL)
* @author william.liangf
*/
public interface Monitor extends Node, MonitorService {} 

具体定义内容可以查看MonitorService接口,不再累述。

总结

Dubbo还提供了其他很多高级特性,如路由规则、参数回调、服务分组、服务降级等等,而且很多特性在给出内置实现的基础上,还给出了扩展的接口,我们可以给出自定义的实现,非常方便而且强大。更多可以参考Dubbo官网用户手册和开发人员手册。 

附录:Dubbo使用Maven构建依赖配置 

    <properties><spring.version>3.2.8.RELEASE</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion><exclusion><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.15.0-GA</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>hessian-lite</artifactId><version>3.2.1-fixed-2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.8</version></dependency><dependency><groupId>org.jvnet.sorcerer</groupId><artifactId>sorcerer-javac</artifactId><version>0.8</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.5</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId><version>3.2.7.Final</version></dependency></dependencies>
View Code

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开篇-开启全新的.NET现代应用开发体验

01云原生技术底座畅想DaprMASA Framework研发管理研发协作平台&#xff1a;CI/CD、Application ManagementApplication Quota Management、Version Control、Troubleshooting、Testable网格应用程序管理API网关&#xff1a;Reverse Proxy、Traffic Control 、Security Strategy…

Ubuntu安装docker详细教程

1.安装 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository &qu…

java多线程编程——锁优化

并发环境下进行编程时&#xff0c;需要使用锁机制来同步多线程间的操作&#xff0c;保证共享资源的互斥访问。加锁会带来性能上的损坏&#xff0c;似乎是众所周知的事情。然而&#xff0c;加锁本身不会带来多少的性能消耗&#xff0c;性能主要是在线程的获取锁的过程。如果只有…

【QGIS入门实战精品教程】10.3:QGIS栅格DEM数据重复类方法案例汇总

QGIS栅格DEM数据重复类方法案例汇总:按表格重分类、按图层重分类。 参考阅读: 【GlobalMapper精品教程】029:栅格重分类案例详解 ArcGIS实验教程——实验四十三:ArcGIS栅格重分类(Reclass)案例详解 ArcGIS怎样获取重分类后各类所占的像元个数 文章目录 一、按表格分类二、…

QT添加rtmp库的时候出现问题

刚开始出现undefined reference to __chkstk的错误。 然后在vc里面找到chkstk.obj放到相关目录下并在工程文件直接添加&#xff1a; LIBS "E:\QTProjects\RTMP\RTMPDelayTest\librtmp\lib\chkstk.obj" 又出现了新的错误 E:\QTProjects\RTMP\RTMPDelayTest\librtmp\l…

@Before,@BeforeClass,@BeforeEach和@BeforeAll之间的区别

Before的代码在每次测试之前执行 BeforeClass在整个测试方法执行之前运行一次 如果您的测试类有十个测试&#xff0c;则Before代码将执行十次&#xff0c;但是BeforeClass将仅执行一次。 当多个测试需要共享相同的代码时&#xff0c;可以使用BeforeClass 。 建立数据库连接属于…

记一次 .NET 某工控自动化控制系统 卡死分析

一&#xff1a;背景 1. 讲故事前段时间遇到了好几起关于窗体程序的 进程加载锁 引发的 程序卡死 和 线程暴涨 问题&#xff0c;这种 dump 分析难度较大&#xff0c;主要涉及到 Windows操作系统 和 C 的基础知识&#xff0c;所以有必要简单整理和大家分享一下&#xff0c;上 win…

BZOJ4573:[ZJOI2016]大森林——题解

http://www.lydsy.com/JudgeOnline/problem.php?id4573 https://www.luogu.org/problemnew/show/P3348#sub http://uoj.ac/problem/195 https://loj.ac/problem/2092 小Y家里有一个大森林&#xff0c;里面有n棵树&#xff0c;编号从1到n。一开始这些树都只是树苗&#xff0c;只…

Spring中神奇@aotuWrited

好久没有写博客了&#xff0c;放假就是充电学习的时候&#xff0c;的确一直是这样做的。来给自己一点掌声。我们还是进入今天的主题吧。 我们自己写代码一般会向下面这样干啊&#xff0c;因为这样简单&#xff0c;其余交给spring去做吧。Spring会自动把生成的userService注入进…

40个常用的springBoot注解

一、Spring Web MVC注解 RequestMapping RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。 Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和RequestMappingHndlerAdapter两个类来提供对RequestMapping注解的支持。 RequestMapping注解…

.NET MAUI 跨平台应用开发 I|.NET MAUI 跨平台基础

编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0c;将每周三到周六&…

走出宣传,国产VR手机盒子到底哪家强?

国产VR手机盒子作为入门机是一个不错的选择&#xff0c;不过你知道哪一款更适合你吗&#xff1f; 从去年看虚拟现实还是一个遥不可及的梦&#xff0c;今年却真正的火起来了。各大厂商纷纷推出自家的VR设备&#xff0c;宣传活动如火如荼。爱尝鲜的你是否按耐不住? 如果你觉得动…

Shell 学习笔记之运算符

基本运算符 算术运算符 val expr 2 2 需要注意的是 表达式和运算符之间需要有空格&#xff08;比如2 2&#xff0c;不能是22&#xff09;两边最外面的字符是&#xff0c;在esc键下面&#xff0c;不是引号哦乘号* 前面必须加上反斜杠 \ 才能实现乘法效果&#xff0c;比如 exp…

POJ 2353 DP

双向DP记录路径。 // by SiriusRen #include <stack> #include <cstdio> #include <cstring> using namespace std; stack<int>s; int n,m,RECL,RECR,minn0x3fffffff,a[555][555],f[555][555],recl[555][555],recr[555][555]; int main(){memset(f,0x3…

【ArcGIS Pro微课1000例】0024:自定义坐标系统---以阿尔伯斯投影(Albers)为例

在实际工作中,经常需要进行矢量数据或栅格数据的投影转换工作,但有时候ArcGIS中恰恰没有我们需要的坐标系,此时,就需要我们自定义坐标系。本文以阿尔伯斯投影(Albers)为例,讲解自定义投影的一般过程及注意事项。 文章目录 一、自定义坐标系二、投影转换一、自定义坐标系…

Linux 操作必备 150 个命令

linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说&#xff0c;无论是中央处理器、内存、磁盘驱动器、键盘、鼠标&#xff0c;还是用户等都是文件&#xff0c; Linux 系统管理的命令是它正常运行的核心&#xff0c;与之前的 DOS 命令类似。 linux 命令在系统中有两…

dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

本文记录在 dotnet 6 的网络和在 .NET Framework 的行为的变更。在 dotnet 6 下&#xff0c;默认的网络请求在系统网络代理变更的时候&#xff0c;是不会动态切换代理的。例如在应用运行进行网络通讯之后&#xff0c;打开 Fiddler 抓包&#xff0c;此时将会发现 Fiddler 抓不到…

旧金山参议员提议发布“封杀令”,理由是马路不为机器人所服务

说实话&#xff0c;这个理由有够奇葩。 因为快递无人机所受限制颇多&#xff0c;渐渐地&#xff0c;越来越多的快递机器人被研制出来&#xff08;这里的“机器人”&#xff0c;包括无人车和及机器人&#xff09;&#xff0c;用于城市的快递发送&#xff0c;比如国内的京东无人…

Socket编程:之双机通信

服务端&#xff1a; 1 #include<sys/socket.h>2 #include<sys/types.h>3 #include<stdio.h>4 #include<unistd.h>5 #include<stdlib.h>6 #include<string.h>7 #include<netdb.h>8 #include<netinet/in.h>9 #include<arpa/i…

jquery中$each()

$.each()&#xff1a;可用于遍历任何的集合(无论是数组或对象) $(selector).each()&#xff1a;专用于jquery对象的遍历, 如果是数组,回调函数每次传入数组的索引和对应的值(值亦可以通过this 关键字获取,但javascript总会包装this 值作为一个对象—尽管是一个字符串或是一个数…