zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python的学习之旅———UDP
    Python的学习之旅———socket ,socketserver
    Python的学习之旅———time 模块
    python的学习之旅---面向对象
    Python的学习之旅———re 模块正则表达式
    有事没事找高宇哥聊天,李泽军爸妈聊天,管那么多人干嘛,活好自己
    还有教师观没有记
    Navicat中怎么查看数据库密码
    Oracle 删除用户时出现异常ora-01922: CASCADE must bu specified to drop 用户名
    kali使用sqlmap注入dvma
  • 原文地址:https://www.cnblogs.com/mrmoo/p/9637888.html
Copyright © 2011-2022 走看看