Dubbo入门搭建

2.jpg

刚开始自己学习dubbo的时候看到大佬写的最全最简单的dubbo教程-以XML的形式整合dubbo《二》,应该算是最入门的dubbo demo,所以想把跟着他搭建入门dubbo demo的过程中遇到的问题也分享一下或者说更详细的讲解下,案例均使用springboot的形式,传统mian方法启动的方式.

本文所讲的dubbo示例代码github地址(含dubbo-admin-2.8.4.war):https://github.com/catboshi/dubbo-demo

目前官网给出了,四种整合dubbo的方式分别是,XML配置、属性配置、API配置、注解配置,看官网写的api跟注解配置的方式是类似的,所以我这里只写三种配置方式。详细说明见dubbo官网,这里就不再多说了。但是建议开发中用XML的形式,其它形式最好作为了解。XML整合的案例在快速入门中已经有了,只不过不是与springboot方式整合的,所以这里再次整合一遍。注意服务启动前需要启动注册中心zookeeper,且不要关闭,不知道的请参考:Dubbo-Admin管理平台和Zookeeper注册中心的搭建重复的后面的都不做陈述了。

所需环境

zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册。 关于zookeeper安装、配置、启动请参考:https://blog.csdn.net/lamfang/article/details/108866448

注意,zookeeper启动成功后,请勿关闭

废话不多说,开始搭建

项目结构图

3.png

共同需要的依赖

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

<dependency>
   <groupId>com.study.dubbo</groupId>
   <artifactId>dubbo-xml-springboot-api</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

共同接口的定义

public interface DubboService {
    String sayHello(String name);
}

服务生产者

项目结构

4.png

服务生产者

生产者实现接口

package com.study.server;

import org.springframework.stereotype.Service;

import com.study.service.DubboService;

@Service("dubboService")
public class DubboServiceImpl implements DubboService{

    @Override
    public String sayHello(String name) {
        // TODO Auto-generated method stub
        return "hello,"+name;
    }

}

声明相关配置信息 在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://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="provider" />

    <!-- 用于配置连接注册中心相关信息 -->
    <dubbo:registry address="zookeeper://localhost:2181" />
    <!-- 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 -->
    <dubbo:protocol name="dubbo" port="20880" accesslog="true" />

    <!--用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 -->
    <!--每个接口都应定义版本号,为后续不兼容升级提供可能 -->
    <!--ref:服务的真正实现类 -->
    <dubbo:service interface="com.study.service.DubboService" ref="dubboService" version="1.0.0" />

    <!--监控中心配置 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心。 -->
    <!--<dubbo:monitor protocol="registry"></dubbo:monitor>-->
    <!-- 直连监控中心服务器地址 -->
    <!-- <dubbo:monitor address="localhost:6379"></dubbo:monitor> -->

</beans>

服务启动

注意包扫描,与加载provider.xml文件

package com.study;

import java.util.Random;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

/**
 * @author Jackie Wang
 ** 项目名称:dubbo-xml-springboot-provider  
 * 类名称:DubboProviderApplication  
 * 类描述:springboot-dubbo启动类
 * 创建时间:2019年5月4日 下午8:47:04  
 */
@SpringBootApplication
@ComponentScan(basePackages={"com.study"})
@ImportResource(locations = "classpath:provider.xml")
public class DubboProviderApplication implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(DubboProviderApplication.class, args);
    }

    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        // TODO Auto-generated method stub
        factory.setPort(getRandomPort());
    }

    public static int getRandomPort() {
        int portStart = 8000;
        int portEnd = 10000;
        Random r = new Random();
        int ra = r.nextInt(portEnd-portStart)+portStart;
        return ra;

    }

}

服务消费者

项目结构

5.png

服务注册

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://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="consumer" />

    <dubbo:registry protocol="zookeeper" address="zookeeper://localhost:2181"/>

    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <!-- version 版本号必须和服务提供者版本号对应 -->
    <!--interface 引入服务提供者对外暴露的接口  -->
    <!--url:服务消费者直接服务提供者,服务提供者地址  -->
    <dubbo:reference id="dubboService" interface="com.study.service.DubboService" version="1.0.0" />

    <!--监控中心配置 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心。 -->
    <!--<dubbo:monitor protocol="registry"></dubbo:monitor>-->
    <!--关闭所有消费者启动时检查   -->
    <!--<dubbo:consumer check="false"></dubbo:consumer>-->

</beans>

服务启动

注意包扫描与consumer.xml配置文件的加载

package com.study;

import java.util.Random;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

/**
 * @author Jackie Wang
 ** 项目名称:dubbo-xml-springboot-consumer  
 * 类名称:DubboConsumerApplication  
 * 类描述:springboot-dubbo启动类
 * 创建时间:2019年5月6日 上午9:33:15  
 */
@SpringBootApplication
@ComponentScan(basePackages={"com.study"})
@ImportResource(locations = "classpath:consumer.xml")
public class DubboConsumerApplication implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(DubboConsumerApplication.class,args);
    }

    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        // TODO Auto-generated method stub
        factory.setPort(getRandomPort());
    }

    public static int getRandomPort() {
        int portStart = 8000;
        int portEnd = 10000;
        Random r = new Random();
        int ra = r.nextInt(portEnd-portStart)+portStart;
        return ra;

    }

}

调用服务

服务调用的代码为:

package com.study.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.study.service.DubboService;
@RestController
public class DemoController {
    @Autowired
    private DubboService dubboService; 

    @RequestMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        return dubboService.sayHello(name);
    }

}

调用结果测试

启动服务提供端,再启动消费端

7.png

8.png

访问:http://localhost:8164(消费端启动端口)/sayHello?name=Jackie

如果出现如图说明ok了: 6.png


已有 0 条评论

    感谢参与互动!