图示
pom.xm
<groupId>cn.jzhgroupId>
<artifactId>dubbo-serviceartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
接口类
public interface DemoService {
public String test (String msg);
}
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.jzhgroupId>
<artifactId>dubbo-service-implartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>cn.jzhgroupId>
<artifactId>dubbo-serviceartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.6.12version>
dependency>
<dependency>
<groupId>com.101tecgroupId>
<artifactId>zkclientartifactId>
<version>0.10version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>io.nettygroupId>
<artifactId>netty-allartifactId>
<version>4.1.32.Finalversion>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>4.0.1version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
exclusion>
exclusions>
dependency>
dependencies>
project>
import cn.jzh.service.DemoService;
public class DemoServiceImpl implements DemoService {
@Override
public String test (String msg) {
return "dubbo接收信息"+msg;
}
}
applicationContext-dubbo.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-server"/>
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper">dubbo:registry>
<dubbo:protocol name="dubbo" port="20881">dubbo:protocol>
<dubbo:service interface="cn.jzh.service.DemoService" ref="demoServiceImpl">dubbo:service>
<bean id="demoServiceImpl" class="cn.jzh.service.impl.DemoServiceImpl">bean>
beans>
常用配置文件说明:
:服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心
:引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心
:协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
:应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
:模块配置,用于配置当前模块信息,可选
:注册中心配置,用于配置连接注册中心相关信息
:监控中心配置,用于配置连接监控中心相关信息,可选
:提供方配置,当 ProtocolConfig
和 ServiceConfig
某属性没有配置时,采用此缺省值,可选provider
是原始的服务提供方式:配置参数超级多,比较繁琐,学习成本大service
是在provider
的基础上给了很多默认值,用户使用时只需配置少量必需的值,大大降低学习成本
:消费方配置,当 ReferenceConfig
某属性没有配置时,采用此缺省值,可选reference
是consumer
基础上发展来的,consumer
也是原始的服务提供方式
:方法配置,用于ServiceConfig
和 ReferenceConfig
指定方法级的配置信息
:参数配置,用于指定方法参数配置applicationContext-dubbo.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-server"/>
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper" >dubbo:registry>
<dubbo:protocol name="dubbo" port="20881">dubbo:protocol>
<dubbo:annotation package="cn.jzh.service.impl" />
beans>
同时提供实现类上面也要用到注解的方式,要使用来自阿里的@Service
注解
import cn.jzh.service.DemoService;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String test(String msg) {
return "dubbo接收信息"+msg;
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
context.start();
System.out.println("启动成功");
}
}
当开启zookeeper
服务后,再启动服务,在打印出启动成功后,就直接关闭,如果想一直启动,就要换个能一直启动而不会关闭的启动方式
注意:
启动的时候需要启动zookeeper
不然不会启动成功
由于直接读取配置文件启动服务,服务会很快关闭,此处就使用dubbo官方推荐的com.alibaba.dubbo.container.Main.main()
方法启动
注意:
用此种方法启动,需要把配置文件applicationContext-dubbo.xml
放在resource
文件夹的META-INF/spring/*.xml
里面去
启动参考示例:
import com.alibaba.dubbo.container.Main;
public class App {
public static void main(String[] args) {
//官方推荐
//要求配置文件必须在 META-INF/spring/*.xml 里面去
Main.main(args);
}
}
上面示例是xml配置的,还有dubbo.properties
方式配置
如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring
容器想共享配置,可以使用 dubbo.properties
作为缺省配置。
Dubbo
将自动加载 classpath
根目录下的 dubbo.properties
,可以通过JVM
启动参数 -Ddubbo.properties.file=xxx.properties
改变缺省配置位置。
dubbo.properties
配置样例
# 应用名
dubbo.application.name=dubbodemo-provider
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 广播的注册中心样例
# dubbo.registry.address=multicast://224.5.6.7:1234
# 调用协议地址
dubbo.protocol.name=dubbo
dubbo.protocol.port=28080
覆盖策略:
JVM
启动-D
参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口XML
次之,如果在 XML
中有配置,则 dubbo.properties
中的相应配置项无效。Properties
最后,相当于缺省值,只有 XML
没有配置时,dubbo.properties
的相应配置项才会生效,通常用于共享公共配置,比如应用名。注意:
classpath
根目录下存在多个 dubbo.properties
,比如多个 jar 包中有 dubbo.properties
,Dubbo
会任意加载,并打印 Error 日志,后续可能改为抛异常。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.jzhgroupId>
<artifactId>dubbo-consumerartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>cn.jzhgroupId>
<artifactId>dubbo-serviceartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.6.12version>
dependency>
<dependency>
<groupId>com.101tecgroupId>
<artifactId>zkclientartifactId>
<version>0.10version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>io.nettygroupId>
<artifactId>netty-allartifactId>
<version>4.1.32.Finalversion>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>4.0.1version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
exclusion>
exclusions>
dependency>
dependencies>
project>
接口
public interface ConsumerService {
void test();
}
实现类,注意此处的实现类应用的alibaba里面的包
import cn.consumber.service.ConsumerService;
import cn.jzh.service.DemoService;
import com.alibaba.dubbo.config.annotation.Reference;
public class ConsumerServiceImpl implements ConsumerService {
@Reference
private DemoService demoService;
@Override
public void test() {
//调用provider种提供的功能
System.out.println(demoService.test("测试Dubbo信息"));
}
}
dubbo-admin获取地址:https://github.com/apache/dubbo-admin/tree/master,直接获取master分支,下载zip包
最新版本的dubbo-admin
当中采用了前后端分离的的设计模式,所以要求要有java
的环境,还得搭建node.js
的运行环境,在service
开启服务后,还需在dubbo-admin-ui
中开启前端的代码
用idea
打开服务即可
需要在dubbo-admin-service
当中配置zookper
地址
zookeeper配置
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181
nacos配置
#admin.registry.address=nacos://127.0.0.1:8848?group=DEFAULT_GROUP&namespace=public
#admin.config-center=nacos://127.0.0.1:8848?group=dubbo
#admin.metadata-report.address=nacos://127.0.0.1:8848?group=dubbo
配置默认端口,不配置的话默认是8080容易发生冲突,username,password既为登录账号密码
server.port=8001
admin.root.user.name=root
admin.root.user.password=root
打包的话,需要在最顶层的服务打包,这样会把下面全部给打包了,然后在把dubbo-admin-server
对应的服务启动即可
启动服务需要先启动zookeeper
服务,不然启动失败
启动后直接访问:http://127.0.0.1:8080/
示例图示
如果把服务关闭了,需要等待10秒
,这是一个优雅关机策略