• 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

  • 相关阅读:
    js一次性删除一个数组中多个元素
    js防抖,节流
    js 生成一个永不重复的ID
    mavon-editor 使用方法以及回显
    导出---后台返回二进制流文件数据,前端转换格式进行下载
    vue 监控enter键触发
    上传视频到阿里云
    前端图片压缩
    向后台传输表情时,手机自带输入法emoji表情的输入,提交及显示——前端解决方案
    vue 之this.$router.push、replace、go的区别
  • 原文地址:https://www.cnblogs.com/mrmoo/p/9637888.html
Copyright © 2020-2023  润新知