Java-第十九部分-Dubbo-maven和cloud集成

181 阅读1分钟

Dubbo全文

maven集成

服务端

  • 第一步,需要创建一个服务端的大工程 image.png
  • 第二步,需要创建一个服务的统一接口模块,并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
  • 配置注册中心后,客户端会根据接口的全类名在注册中心去查找 image.png
  • zk上的服务元数据的保存 image.png

Spring Cloud集成

  • dubbo是与Spring Cloud平级的,服务治理上更加突出 image.png
  • 基于不同的生态继承dubbo,产生的元数据就不一样,基于cloud发布的服务,用boot的调用可能就无法调用

整体结构

image.png

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