Spring boot 集成dubbo

Spring boot 集成dubbo


开发环境

  • JDK 1.8
  • Spring boot 2.0.4.RELEASE
  • dubbo-starter 2.0.0 with dubbo 2.6.0

Pom.xml

这里使用的zookeeper作为注册中心,所以需要导入zookeeper相关的两个jar包,相关依赖如下


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <type>pom</type>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>


Provider

application.properties

server.port=8080
dubbo.application.name=user-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

定义接口UserService

package cn.demo.service;

public interface UserService {

    String getUsername(int id);

}

实现UserService

package cn.demo.provider.service.impl;

import cn.demo.service.UserService;
import com.alibaba.dubbo.config.annotation.Service;

/**
 * 注意这里@Service注解需要使用dubbo的
 */
@Service
public class UserServiceImpl implements UserService {
    @Override
    public String getUsername(int id) {
        switch (id){
            case 1 : return "zhangsan";
            case 2 : return "lisi";
            case 3 : return "wangwu";
            case 4 : return "zhaosi";
            default: return "can't find name";
        }
    }
}

Spring boot 启动类

package cn.demo.provider;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
//配置dubbo扫描的包,这里区别于官网使用@EnableDubboConfiguration
@EnableDubbo(scanBasePackages = "cn.demo.provider")
public class DubboUserApplication {

    public static void main(String[] args) {
        //这里手动设置本机ip,当本地是多网卡环境时,dubbo会默认取出第一块非localhost网卡的ip,但是有时候第一块网卡的ip可能不是正确的本机ip
        System.setProperty("DUBBO_IP_TO_REGISTRY","192.168.43.234");
        SpringApplication.run(DubboUserApplication.class, args);
    }
}

Consumer

application.properties

server.port=8081
dubbo.application.name=user-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo

UserController

package cn.demo.dubbo.comsume.controller;

import cn.demo.service.UserService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    //使用reference注解即可实现userService的注入
    @Reference
    private UserService userService;

    @RequestMapping("/username/{id}")
    public String username(@PathVariable int id){
        return userService.getUsername(id);
    }
}

Spring boot 启动类

package cn.demo.dubbo.comsume;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
@EnableDubbo(scanBasePackages = "cn.demo.dubbo")
public class DubboComsumeApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(DubboComsumeApplication.class, args);
    }
}

  • 为什么使用EnableDubbo,因为作为provider时使用该注解无法读取application.properties中的配置,原因还没找到,EnableDubbo能很好的工作

  • 代码在此dubbo-demo

posted @ 2018-09-12 22:43  NullPointerExcetion  阅读(1208)  评论(0编辑  收藏  举报