springboot整合dubbo

249 阅读1分钟

Springboot(2.1.5.RELEASE)引入dubbo时走了一些弯路,所以记录下。

1、maven配置

<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.11</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.6</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2、启动类,改了一下dubbo-qos端口

import com.alibaba.dubbo.qos.common.Constants;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class Application {
    public static void main(String[] args) {
        System.setProperty(Constants.QOS_PORT, "22333");
        SpringApplication.run(Application.class, args);
    }
}

3、yml配置(多注册中心),自定义异常处理类myRpcProviderFilter

spring:
  dubbo:
    application:
      name: springboot-dubbo-demo
    registry:
      protocol: zookeeper
      address: 192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181
    protocol:
      name: dubbo
      port: 20890
    consumer:
      timeout: 60000
    provider:
      filter: myRpcProviderFilter,-exception
    server: true

4、消费者代码

在对应的maven中引入api的依赖后,直接使用@Reference即可引入对应的服务。

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class SomeServiceImpl implements ISomeService{

    @Reference
    private IDemoService demoService;

}

5、生产者代码

前提是有个首先有个接口的模块提供api接口,在实现模块直接使用@Service即可提供对应的服务。

import com.alibaba.dubbo.config.annotation.Service;

@Component
@Service(timeout = 15000, interfaceClass = ISomeProviderService.class)
public class SomeProviderServiceImpl implements ISomeProviderService {

    @Override
    protected String provide(String name) {
        return "hello "+ name+"!";
    }
}

####6、启动 start.png