Dubbo全文
maven集成
服务端
- 第一步,需要创建一个服务端的大工程
- 第二步,需要创建一个服务的统一接口模块,并
install
发布
public interface IDubboService {
String hello(String username);
}
- 第三步,需要创建一个服务端模块,实现服务接口
public class DubboHelloImpl implements IDubboService{
@Override
public String hello(String username) {
return "Server: " + username;
}
}
- 第四步,服务模块的main方法调用
Main.main(args);
客户端
- 直接加载xml文件,调用
public class App
{
public static void main( String[] args )
{
ApplicationContext context =
new ClassPathXmlApplicationContext("classpath:META-INF/spring/application.xml");
IDubboService dubboService = context.getBean(IDubboService.class);
System.out.println( "Hello World!" + dubboService.hello("client"));
}
}
xml
- 服务器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-server"/>
<!-- <dubbo:registry address="zookeeper://localhost:2181" timeout="10000"/>-->
<dubbo:registry address="nacos://localhost:8848" timeout="10000"/>
<!--不需要注册到服务注册中心-->
<!-- <dubbo:registry address="N/A"/>-->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.java.dubbo.IDubboService" ref="dubboHelloService"/>
<bean id="dubboHelloService" class="com.java.dubbo.DubboHelloImpl"/>
</beans>
- 客户端
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-client"/>
<!-- <dubbo:registry address="N/A"/>-->
<!-- <dubbo:registry address="zookeeper://localhost:2181" timeout="10000"/>-->
<dubbo:registry address="nacos://localhost:8848" timeout="10000"/>
<dubbo:reference id="helloService" interface="com.java.dubbo.IDubboService"/>
</beans>
pom
- 服务端与客户端的依赖一样
<dependency>
<artifactId>doubbo-server-api</artifactId>
<groupId>com.java.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.2.1</version>
</dependency>
解析
- 服务器启动时会提供一个协议的url地址
dubbo://192.168.1.112:20880/com.java.dubbo.IDubboService
- 配置注册中心后,客户端会根据接口的全类名在注册中心去查找
- zk上的服务元数据的保存
Spring Cloud集成
- dubbo是与Spring Cloud平级的,服务治理上更加突出
- 基于不同的生态继承dubbo,产生的元数据就不一样,基于cloud发布的服务,用boot的调用可能就无法调用
整体结构
pom
<dependency>
<groupId>com.java.cloud</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>cloud-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
properties
- 服务端
# 扫描哪个包下可以找到dubbo的服务
dubbo.scan.base-packages=com.java.cloudprovider.service
# 服务的端口
dubbo.protocol.port=20882
# 解析协议
dubbo.protocol.name=dubbo
# nacos的地址
spring.cloud.nacos.discovery.server-addr=localhost:8848
- 客户端
# 解析协议
dubbo.protocol.name=dubbo
# nacos的地址
spring.cloud.nacos.discovery.server-addr=localhost:8848