Dubbo之 环境搭建(一)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 搭建服务的提供者和服务的消费者,实现服务消费者跨应用远程调用服务提供者

和传统ssm整合--写XML配置文件#


搭建服务的提供者和服务的消费者,实现服务消费者跨应用远程调用服务提供者


公共模块抽取#


  • 公共模块的抽取


服务的消费者远程调用服务的提供者, 最起码他自己要得到在服务提供者提供服务的那个类的引用, 那消费者和服务的一人一份,如果是集群就会翻倍,故抽取公共模块,存放公共使用的类和接口



服务提供者#


  • 依赖


// 自定义的公共模块
<dependency>
    <groupId>com.changwu</groupId>
    <artifactId>commom</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.3</version>
</dependency>


  • 编写提供服务的业务Service, 对接口进行具体的实现


public class UserServiceImpl implements UserService {
    public List<UserAddress> getUserAddressList() {
        UserAddress a1=   new UserAddress(1,"张三","北京市朝阳区");
        UserAddress a2=    new UserAddress(2,"李四","山东济南");
        return Arrays.asList(a1,a2);
    }
}


  • 编写配置文件provider.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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 暴露服务提供者, name=服务名(不能和其他服务名重复) -->
    <dubbo:application name="user-service-provider"  />
    <!-- z指定zookeeper的地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 指定通信规则,通信协议, 通信端口. 服务消费者和dubbo之间的通信-->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 声明需要暴露的服务接口  ref=服务的真正实现, 下面使用<bean>调用-->
    <dubbo:service interface="com.changwu.service.UserService" ref="userService" />
    <!-- 接口的实现 -->
    <bean id="userService" class="com.changwu.service.impl.UserServiceImpl" />
    <dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>


schema配置参考手册, 点击查看全部标签,及详细解释

补充: 属性配置的重写覆盖优先级



  • 优先级最高 JVM 启动时 使用-D设置参数
  • 次之,dubbo.xml
  • 再次之 dubbo.properties

如下,是一个典型的dubbo.properties配置样例。


dubbo.application.name=foo
dubbo.application.owner=bar
dubbo.registry.address=10.20.153.10:9090


  • idea设置虚拟机启动参数



  • log4j配置文件,(不添加的话会有警告)


###set log levels###
log4j.rootLogger=info, stdout
###output to console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n


服务的消费者#


  • 依赖


// 自定义的公共模块
<dependency>
    <groupId>com.changwu</groupId>
    <artifactId>commom</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
// zk的客户端依赖 curator
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
</dependency>


  • 编写consumer.xml


编写配置文件自己的服务名,配置注册中心的地址,进而向注册中心拉取服务的列表,配置当前的消费者中使用的哪些接口是通过远程RPC调用实现的, 还可以配置监控中心查看服务的健康情况,彼此的调用情况,别忘了使用Spring注解还得配置包扫描


<?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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="order-service"  />
    <!--注册中心地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 生成远程服务代理,可以和本地bean一样使用 userService -->
    <dubbo:reference id="userService" interface="com.changwu.service.UserService" />
    <!--添加包扫描-->
    <context:component-scan base-package="com.changwu"></context:component-scan>
    <!--配置监控中心,有下面两种方式 1. 去注册中心自动发现, 2. 直连模式-->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
   <!-- <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>-->
</beans>


  • 消费者调用服务提供者的实现
    下面的@Service注解使用的Spring原生的


@Service // 没有用dubbo的service注解
public class OrderServiceImpl implements OrderService {
    @Autowired
    UserService userService;
    public List initOrder(String userId) {
        // 查询用户的地址
        System.out.println("userId == "+userId);
        List<UserAddress> userAddressList = userService.getUserAddressList("1");
        for (UserAddress userAddress : userAddressList) {
            System.out.println(userAddress.getAdress());
        }
        return userAddressList;
    }
}


  • 启动测试


public class MainApp {
public static void main(String[] args) {
    ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("consumer.xml");
    OrderService orderService = ioc.getBean(OrderService.class);
    orderService.initOrder("1");
    try {
        System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}


整合Springboot#


公共模块#


同样重复使用类,接口放到中,然后在其它模块引用


服务提供者#


  • 依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.changwu</groupId>
    <artifactId>common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<!--
    dubbo整合进springboot
    zookeeper,curate它都已经导入进来了
 -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>


  • 将provider.xml配置文件替换成application.properties

可以将xml的tag名和属性名组合起来,用‘.’分隔。每行一个属性


# 指定当前的服务, 一般为了防止重复,设置成当前module的名字
dubbo.application.name=provider
# 指定注册中心的地址
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
# dubbo 使用的协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 原配置文件中暴露服务的名字,使用类似下面的方式,但是在SpringBoot中使用 @Service注解(dubbo的)
# dubbo.service.interface=com.changwu.service.UserService
# 监控中心
dubbo.monitor.protocol=registry
server.port=8082


  • 服务提供者对接口进行实现
    @Service使用的dubbo的接口


@Component
@Service //使用dubbo的Service 对外保留服务
public class UserServiceImpl implements UserService {
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress a1=   new UserAddress(1,"张三","北京市朝阳区");
        UserAddress a2=   new UserAddress(2,"李四","山东济南");
        return Arrays.asList(a1,a2);
    }
}


  • 启动类,开启dubbo配置


@EnableDubbo
@SpringBootApplication
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class);
    }
}


服务的消费者#


  • 依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.changwu</groupId>
    <artifactId>common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>


  • 使用application.properties配置文件替换consumer.xml


# 告诉注册中心自己的名字
dubbo.application.name=consumer
# 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 配置监控中心
dubbo.monitor.protocol=registry
# 原来在配置文件中使用 dubbo:reference 配置远程调用的接口,现在用注解
server.port=8081


  • 远程调用@Reference dubbo注解


@Service
public class OrderServiceImpl implements OrderService{
    //@Autowired
    @Reference // dubbo的注解
    UserService userService;
    public  List<UserAddress> initOrder(String userId) {
        return  userService.getUserAddressList("1");
    }
}


  • 编写Controller
  • 启动类, 开启dubbo配置


@EnableDubbo
@SpringBootApplication
public class MainApp {
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class);
    }
}



相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
Dubbo Java 应用服务中间件
Dubbo之 环境搭建(二)
搭建服务的提供者和服务的消费者,实现服务消费者跨应用远程调用服务提供者
233 0
|
负载均衡 Dubbo NoSQL
Dubbo实战(四) -业务环境搭建(下)
Dubbo实战(四) -业务环境搭建(下)
92 0
Dubbo实战(四) -业务环境搭建(下)
|
Dubbo 应用服务中间件
Dubbo实战(四) -业务环境搭建(中)
Dubbo实战(四) -业务环境搭建(中)
95 0
Dubbo实战(四) -业务环境搭建(中)
|
负载均衡 Dubbo Java
Dubbo实战(四) -业务环境搭建(上)
Dubbo实战(四) -业务环境搭建(上)
131 0
Dubbo实战(四) -业务环境搭建(上)
|
Dubbo 应用服务中间件
Dubbo实战(三) -业务环境搭建(下)
Dubbo实战(三) -业务环境搭建(下)
101 0
Dubbo实战(三) -业务环境搭建(下)
|
设计模式 SQL 负载均衡
Dubbo实战(三) -业务环境搭建(上)
Dubbo实战(三) -业务环境搭建(上)
129 0
Dubbo实战(三) -业务环境搭建(上)
|
XML Dubbo Java
Dubbo实战(二) - 环境搭建(下)
Dubbo实战(二) - 环境搭建(下)
143 0
Dubbo实战(二) - 环境搭建(下)
|
Dubbo Java 应用服务中间件
Dubbo实战(二) - 环境搭建(中)
Dubbo实战(二) - 环境搭建(中)
105 0
Dubbo实战(二) - 环境搭建(中)
|
Dubbo Java 应用服务中间件
Dubbo实战(二) - 环境搭建(上)
Dubbo实战(二) - 环境搭建(上)
167 0
Dubbo实战(二) - 环境搭建(上)
|
8月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
下一篇
开通oss服务