Dubbo(二)—— Dubbo-hello

一、dubbo-hello

1、提出需求

某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;

我们现在 需要创建两个服务模块进行测试

模块功能
订单服务web模块创建订单等
用户服务service模块查询用户地址等

测试预期结果:

订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。

2、工程架构

​ 建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

2020816211252

image-20200816211333874

这时候服务提供层和服务消费层,必须导入接口依赖,才能使用接口方法和Bean:

在两者 pom.xml 文件中:

<dependencies>
    <dependency>
        <groupId>com.xiaojian.gmall</groupId>
        <artifactId>gmall-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

3、使用 dubbo 改造

1、将服务提供者注册到注册中心(暴露服务)

(1)、导入dubbo依赖(2.6.2)与 操作 zookeeper 的客户端

<!-- 引入dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
<!-- 由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
     dubbo 2.6以前的版本引入zkclient操作zookeeper 
     dubbo 2.6及以后的版本引入curator操作zookeeper
     下面两个zk客户端根据dubbo版本2选1即可
-->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
<!-- curator-framework (选)-->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.12.0</version>
		</dependency>

(2)、配置服务提供者

<!-- 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">

    <!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务重名) -->
    <dubbo:application name="user-service-provider"></dubbo:application>

    <!-- 2、指定注册中心的地址-->
<!--    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> 或-->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>

    <!-- 3、指定通信规则(通信协议?通信端口)-->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

    <!-- 4、暴露服务接口,ref:指向真正实现对象-->
    <dubbo:service interface="com.xiaojian.gmall.service.UserService" ref="userServiceImpl"></dubbo:service>

    <!-- 5、服务的实现-->
    <bean id="userServiceImpl" class="com.xiaojian.gmall.service.impl.UserServiceImpl"></bean>
</beans>

(3)、启动服务(之前的 zkServer.cmd,和dubbo-admin都要开着)

// MainApplication.java

public class MainApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
        ioc.start();

        System.in.read();

    }
}

(4)、测试

​ localhost:7001,刷新

image-20200816221154495

2、让服务消费者去注册中心订阅服务提供者的服务地址

(1)、导入dubbo依赖(2.6.2)与 操作 zookeeper 的客户端

<!-- 引入dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>
<!-- 由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
     dubbo 2.6以前的版本引入zkclient操作zookeeper 
     dubbo 2.6及以后的版本引入curator操作zookeeper
     下面两个zk客户端根据dubbo版本2选1即可
-->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
<!-- curator-framework(选) -->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.12.0</version>
		</dependency>

(2)、配置服务消费者

<!-- consumer.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" 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">

    <!--扫描注解-->
    <context:component-scan base-package="com.xiaojian.gmall.service.impl"></context:component-scan>

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="user-service-provider"></dubbo:application>

    <!-- 2、使用zookeeper注册中心暴露发现服务地址 -->
    <!--    <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>-->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>

    <!-- 3、使用远程服务代理的接口,可以和本地bean一样使用userService -->
    <dubbo:reference id="userService" interface="com.xiaojian.gmall.service.UserService" />

</beans>

(3)、启动服务(服务提供者要在启动中状态)

// MainApplication.java

public class MainApplication {

    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("consumer.xml");

        OrderService orderService = ioc.getBean(OrderService.class);

        orderService.initOrder("1");
        System.out.println("调用完成!");

        System.in.read();
    }

}

二、监控中心

dubbo-admin

图形化的服务管理页面;安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理

dubbo-monitor-simple

简单的监控中心;

1、安装

1、在文件路径 …\dubbo-admin-master\dubbo-admin-master\dubbo-monitor-simple,进入cmd控制台,使用命令行 mvn package 打包;

2、在打包好的 target 文件夹里,解压 dubbo-monitor-simple-2.0.0-assembly.tar.gz后,进入该文件夹/conf;

3、修改配置:(默认不用修改)

dubbo.container=log4j,spring,registry,jetty-monitor
dubbo.application.name=simple-monitor
dubbo.application.owner=dubbo
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.protocol.port=7070
dubbo.jetty.port=8080
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${user.home}/monitor/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

4、启动,/assembly.bin/start.bat。(zookeeper注册中心得启动,dubbo-admin得启动)

访问:localhost:8080

image-20200817073726860

2、监控中心配置

<!-- consumer.xml、provider.xml -->

    <!-- 连接监控中心-->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
<!-- 或   <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>-->

再次启动服务提供者和服务消费者,监控中心:

image-20200817074504261

三、整合 Spring Boot

​ 与 dubbo-hello 需求相同,创建服务提供者和服务消费者两个Spring Boot项目;两个项目中的内容同 dubbo-hello。

1、导入依赖

dubbo-spring-boot-starter,包括了dubbo2.6.2,zookeeper,curator-framework

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

image-20200817082845912

2、配置 application.properties

# 提供者配置
dubbo.application.name=user-service-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

dubbo.monitor.protocol=registry

# 暴露服务用dubbo的@Service注解代替,并在主程序类配置@EnableDubbo


# 消费者配置
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.monitor.protocol=registry

# 使用远程服务器(提供者)提供的接口,在使用到的接口上使用@Reference注解

3、dubbo注解

  • @Service (dubbo的),配置在服务接口实现类上,暴露服务;(提供者)
  • @Reference,使用远程服务器(提供者)提供的接口;(消费者)
  • @EnableDubbo,配置在主程序类上;(两者都要加载主程序类上)

4、使用业务

@Controller
public class OrderController {

    @Autowired
    OrderService orderService;

    @ResponseBody
    @RequestMapping("/initOrder")
    public List<UserAddress> initOrder(@RequestParam("uid")String userId){
        return orderService.initOrder(userId);
    }

}

5、测试

因为目前,monitor占用的8080端口,所以我们将消费者服务器端口号改为8081

启动,提供者、消费者,访问 http://localhost:7001/

image-20200817090550814

访问 http://localhost:8081/initOrder?uid=1,得到:

[
    {
        "id":1,
     	"userAddress":"北京市昌平区宏福科技园综合楼3层",
     	"userId":"1","consignee":"李老师",
     	"phoneNum":"010-56253825",
     	"isDefault":"Y"
    },
	{
        "id":2,
     	"userAddress":"深圳市宝安区西部硅谷大厦B座3层(深圳分校)",
     	"userId":"1",
     	"consignee":"王老师",
     	"phoneNum":"010-56253825",
     	"isDefault":"N"
    }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值