springboot使用dubbo和zookeeper

2019-11-17 ylsweb

建立服務接口模塊

接口工程只提供接口,不提供實現,在後面的提供者和消費者中使用
在使用接口的模塊中只須要寫具體實現類,避免了在每一個模塊中重複編寫接口spring

  1. 在接口中引入依賴包api

    <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
  2. 建立一個實體類,必定要實現Serializable接口,不然dubbo協議之間沒法傳輸緩存

    @Data
    @AllArgsConstructor
    public class User implements Serializable {
        private String name;
    }
  3. 建立接口app

    public interface UserService {
        List<User> getAll();
        List<User> getAll2();
    }

建立服務提供者

  1. 引入依賴ide

    <!--引入建立的接口服務-->
            <dependency>
                <groupId>com.yls</groupId>
                <artifactId>common-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!--因爲服務提供者不是web項目
            ,只需引入spring-boot-starter,不用引入spring-boot-starter-web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <!--dubbo-->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
  2. 修改配置文件spring-boot

    #服務名稱
    dubbo.application.name=provider1
    #註冊中心地址
    dubbo.registry.address=39.97.234.52:2181,39.97.234.52:2182,39.97.234.52:2183
    #註冊中心類型
    dubbo.registry.protocol=zookeeper
    
    #版本號
    dubbo.application.version=3
    # Dubbo Protocol
    #協議名稱
    dubbo.protocol.name=dubbo
    #服務暴露端口
    dubbo.protocol.port=20880
  3. 實現服務接口url

    //暴露服務
    //這裏的@Service是Dubbo提供的,不是spring中的
    //version必填
    @Service(version = "${dubbo.application.version}")
    @Component
    public class UserImpl implements UserService {
        @Override
        public List<User> getAll() {
            User user1 = new User("張三");
            User user2 = new User("lisi");
            List<User> list = Arrays.asList(user1, user2);
            return list;
        }
    }
  4. 啓動服務code

    //@EnableDubbo等價於在配置文件中配置dubbo.scan.base-packages
    //掃描實現類所在的包,註冊Bean
    @EnableDubbo
    @SpringBootApplication
    public class ProviderApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(ProviderApplication.class,args);
        }
    }

建立消費者

  1. 引入依賴接口

    <!--消費者是web項目-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--dubbo-->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
    
            <!--引入建立的接口服務-->
            <dependency>
                <groupId>com.yls</groupId>
                <artifactId>common-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
  2. 修改配置文件

    #註冊中心
    dubbo.registry.address=39.97.234.52:2181,39.97.234.52:2182,39.97.234.52:2183
    dubbo.registry.protocol=zookeeper
    #dubbo應用名稱
    dubbo.application.name=consumer1
  3. 實現消費接口

    //服務消費者的Service是spring的
    @Service
    public class OrderImpl implements OrderService {
    
        //使用dubbo提供的@Reference訪問遠程服務
        //version對應服務提供者的version
        @Reference(version = "3")
        private UserService userService;
    
        @Override
        public List<User> init() {
            List<User> list = userService.getAll();
            list.forEach(item -> System.out.println(item.getName()));
            return list;
        }
    }
  4. 建立controller

    @Controller
    public class OrderController {
    
        @Autowired
        private OrderService orderService;
    
        @ResponseBody
        @RequestMapping("/init")
        public List<User> init() {
            return orderService.init();
        }
    }
  5. 啓動服務消費者

    @EnableDubbo
    @SpringBootApplication
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }

dubbo相關補充

  1. dubbo使用本地緩存方式,若是註冊中心所有宕機,dubbo也能正常工做,就算沒有註冊中心,dubbo也能經過dubbo直連通訊

    //使用dubbo提供的@Reference訪問遠程服務
        //version對應服務提供者的version
        //url:若是沒有註冊中心,能夠經過url配置服務提供者的dubbo協議端口,進行dubbo直連
        @Reference(version = "3",url ="127.0.0.1:20880" )
        private UserService userService;
相關文章
相關標籤/搜索