Dubbo 应用容器
Dubbo的容器模块,是一个独立的容器,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。
服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。
我们看启动生产者、消费者、简单监控者的 start.sh 命令中,可以看到启动命令如下:
nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &
这里启动的就是 com.alibaba.dubbo.container.Main 类的 public static void main(String[] args) { … } 方法。
服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展,参见:http://dubbo.io/Developer+Guide.htm#DeveloperGuide-ContainerSPI
Spring Container
自动加载META-INF/spring目录下的所有Spring配置。
配置:(配在java命令-D参数或者dubbo.properties中)
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加载位置Container
Jetty Container
启动一个内嵌Jetty,用于汇报状态。
配置:(配在java命令-D参数或者dubbo.properties中)
dubbo.jetty.port=8080 ----配置jetty启动端口
dubbo.jetty.directory=/foo/bar ----配置可通过jetty直接访问的目录,用于存放静态文件
dubbo.jetty.page=log,status,system ----配置显示的页面,缺省加载所有页面
Log4j Container
自动配置log4j的配置,在多进程启动时,自动给日志文件按进程分目录。
配置:(配在java命令-D参数或者dubbo.properties中)
dubbo.log4j.file=/foo/bar.log ----配置日志文件路径
dubbo.log4j.level=WARN ----配置日志级别
dubbo.log4j.subdirectory=20880 ----配置日志子目录,用于多进程启动,避免冲突
容器启动
如:(缺省只加载spring)
java com.alibaba.dubbo.container.Main
或:(通过main函数参数传入要加载的容器)
java com.alibaba.dubbo.container.Main spring jetty log4j
或:(通过JVM启动参数传入要加载的容器)
java com.alibaba.dubbo.container.Main -Ddubbo.container=spring,jetty,log4j
或:(通过classpath下的dubbo.properties配置传入要加载的容器)
dubbo.properties
dubbo.container=spring,jetty,log4j
在web容器中使用内置的监控页面
<filter>
<filter-name>resource</filter-name>
<filter-class>com.alibaba.dubbo.container.page.ResourceFilter</filter-class>
</filter>
<servlet>
<servlet-name>page</servlet-name>
<servlet-class>com.alibaba.dubbo.container.page.PageServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>page</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>resource</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
参考:
http://dubbo.io/Service+Container.htm
扩展容器功能
扩展容器功能, 参考: http://dubbo.io/Container+SPI.htm
扩展容器类功能需要实现 com.alibaba.dubbo.container.Container 接口。
容器的启动
不论生产者、消费者、简单监控 他们的启动 start.sh 命令都是完全一样的。 整个 bin 目录下的文件是完全一样的。
在 start.sh 中,我们看到的 -classpath **** com.alibaba.dubbo.container.Main
nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &
可以证明我们启动的是 com.alibaba.dubbo.container.Main 类的 main 方法。
Java 命令行参数说明
我们这里用到的 Java 命令行参数说明:
java -classpath /home/user/myprogram org.mypackage.HelloWorld
其中:
-classpath /home/user/myprogram 这个参数,指定了程序中要用到的包所在的路径。(在Linux系统中,是这样表达, -classpath /home/user/myprogram)
org.mypackage.HelloWorld 这是主类的名称
http://developer.51cto.com/art/201209/357217.htm
-classpath
虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:Bootstrap classes,Extension classes,User classes
Bootstrap 是虚拟机自带的 jar 或 zip 文件,虚拟机首先搜索这些包文件,用System.getProperty("sun.boot.class.path")可得到虚拟机搜索的包名。
Extension 是位于 jre/lib/ext 目录下的 jar 文件,虚拟机在搜索完 Bootstrap后就搜索该目录下的 jar 文件。用System. getProperty("java.ext.dirs”)可得到虚拟机使用Extension 搜索路径。
User classes 搜索顺序为当前目录、环境变量 CLASSPATH、-classpath。
告知虚拟机搜索目录名、jar 文档名、zip 文档名,之间用分号;分隔。例如当你自己开发了公共类并包装成一个 common.jar 包,在使用 common.jar 中的类时,就需要用-classpath common.jar 告诉虚拟机从 common.jar 中查找该类,否则虚拟机就会抛出 java.lang.NoClassDefFoundError异常,表明未找到类定义。在运行时可用 System.getProperty(“java.class.path”)得到虚拟机查找类的路径。
使用-classpath 后虚拟机将不再使用 CLASSPATH 中的类搜索路径,如果-classpath 和 CLASSPATH 都没有设置,则虚拟机使用当前路径(.)作为类搜索路径。推荐使用-classpath 来定义虚拟机要搜索的类路径,而不要使用环境变量 CLASSPATH 的搜索路径,以减少多个项目同时使用 CLASSPATH 时存在的潜在冲突。例如应用 1 要使用a1.0.jar 中的类 G,应用 2 要使用 a2.0.jar 中的类 G,a2.0.jar 是 a1.0.jar 的升级包,当a1.0.jar,a2.0.jar 都在 CLASSPATH 中,虚拟机搜索到第一个包中的类 G 时就停止搜索, 如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。
javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar class_name.java :使用-classpath选项,指定了在编译Java源代码时,用到类库的位置。一般用于该类库不在当前CLASSPATH的环境变量中。
参考:
http://developer.51cto.com/art/201209/357217.htm
http://my.oschina.net/xianggao/blog/88492
具体服务的启动
至于具体的启动的服务,则跟Spring有关。在完成默认必须加载的 Spring 之后, 根据我们的配置,加载暴露具体的服务。
相关的配置或者代码启动服务请看: http://dubbo.io/Configs-zh.htm
Dubbo 应用容器的更多相关文章
- Dubbo微容器(Cooma)详解
ExtensionLoader ExtensionLoader是Dubbo中的SPI的实现方法,它是Dubbo框架的微容器,也为框架提供各种组件的扩展点 三种注解 SPI Adaptive Activ ...
- Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布
微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...
- dubbo 试用全过程
概述: dubbo服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源. 服务容器只 ...
- (转)史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!
背景:因为自己的简历写了dubbo,面试时候经常被问到.实际自己对dubbo的认识只停留在使用阶段,所以有必要好好补充下基础的理论知识. https://zhuanlan.zhihu.com/p/45 ...
- dubbo学习思路梳理
dubbo要解决的问题 rpc调用需要定制.额外的工作量 分布式服务中,服务动辄几十上百,相互之间的调用错综复杂,相互依赖严重 对集群性的服务,需要负载策略 对集群性的服务,能动态扩展节点 dubbo ...
- 有关dubbo面试的那些事儿
dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...
- dubbo 微服务框架
dubbo 注解配置: @Service //Service注解暴露服务 @Configuration // javaconfig形式配置公共模块 @DubboComponentScan // 指定d ...
- dubbo 面试题
dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含:集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等 ...
- Dubbo面试20问!这些题你都遇到过吗?
作者:Dean Wang https://deanwang1943.github.io/bugs/2018/10/05/面试/饿了么/dubbo 面试题/ 1.dubbo是什么 dubbo是一个分布式 ...
随机推荐
- getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明
getDimension和getDimensionPixelOffset的功能类似, 都是获取某个dimen的值,但是如果单位是dp或sp,则需要将其乘以density 如果是px,则不乘.并且get ...
- C#执行DOS命令(CMD命令)
在c#程序中,有时会用到调用cmd命令完成一些功能,于是在网上查到了如下方法,实现了c#执行DOS命令,并返回结果. //dosCommand Dos命令语句 publ ...
- 手机App开发
/* * 登录:输入 */ public void login(String user, String pwd, TextHttpResponseHandler responsehandler) { ...
- Word快捷键
▲Word快捷键 [F1]键:帮助 [F2]键:移动文字或图形,按回车键确认 [F4]键:重复上一次的操作 [F5]键:编辑时的定位 [F6]键:在文档和任务窗格或其他Word窗格之间切换 [F8]键 ...
- HTML <div> 和 <span>
可以通过 <div> 和 <span> 将 HTML 元素组合起来. HTML 块元素 大多数 HTML 元素被定义为块级元素或内联元素. 编者注:“块级元素”译为 block ...
- HackerRank "Kundu and Tree" !!
Learnt from here: http://www.cnblogs.com/lautsie/p/3798165.html Idea is: we union all pure black edg ...
- LintCode "Expression Evaluation"
This is sth. for me to learn.. https://github.com/kamyu104/LintCode/blob/master/C++/expression-evalu ...
- 【JDBC】向数据表插入数据时,自动获取生成的主键
数据表设计时,一般都会有一个主键(Key)(自己指定),有时也可以使用联合主键: 有许多数据库提供了隐藏列为表中的每行记录分配一个唯一键值(如:rowid): 当我们没有指定哪一列作为主键key时,数 ...
- powerdesigner12.5 设置表字符集和存储引擎
powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS 然后选 ...
- 在Java中使用Memcached(转)
memcache的Java客户端调用,在网上还是有些少,很多都是php的.如何要想用Java调用memcache的服务,首先要有客户端的支持,我们先下载一个客户端吧.下载地址:https://gith ...