spring boot + dubbo + zookeeper服務搭建

只是一個簡單的小例子,分了三個小項目:

  1. 接口提供者provider
  2. 消費者consumer
  3. dubbo-admin(監控已註冊的服務)

準備工作(Windows下):

下載並啓動zookeeper服務,使得接口可以被註冊

  • 下載apache-zookeeper-3.5.5-bin.tar.gz
  • 解壓
  • 進入bin
  • 執行zkServer.cmd

provider

pom.xml中的主要依賴:

 <dependency>
     <groupId>com.alibaba.spring.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>2.0.0</version>
 </dependency>
 <dependency>
     <groupId>org.apache.zookeeper</groupId>
     <artifactId>zookeeper</artifactId>
     <version>3.5.5</version>
 </dependency>
 <dependency>
     <groupId>com.101tec</groupId>
     <artifactId>zkclient</artifactId>
     <version>0.10</version>
 </dependency>

配置文件application.properties:

server.port=8089

#spring.application.name=dubbo-spring-boot-starter
#spring.dubbo.server=true
#spring.dubbo.registry=zookeeper://127.0.0.1:2181

#dubbo服務提供者配置
dubbo.application.id=provider
dubbo.application.name=provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-package=com.example.demo.service
#註冊中心的協議類型
dubbo.registry.protocol= zookeeper

UserService :

package com.example.demo.service;

import com.example.demo.entity.User;

public interface UserService {
    User helloDubbo(String name);
}

UserServiceImpl :

package com.example.demo.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.demo.Util.ChineseToPinyinUtil;
import com.example.demo.entity.User;
import lombok.extern.log4j.Log4j;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springframework.stereotype.Component;

@Service(version = "userService")
@Log4j
@Component
public class UserServiceImpl implements UserService {

    @Override
    public User helloDubbo(String name) {
        User user = new User();
        user.setNickName(name);
        String email = "";
        try {
            email = ChineseToPinyinUtil.convertChineseToPinyin(name, false, HanyuPinyinCaseType.LOWERCASE);
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            log.error(e.getMessage());
        }
        user.setEmail( email + "@qq.com");
        return user;
    }
}

啓動類:

package com.example.demo;

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;

@SpringBootApplication
@EnableDubbo
public class DubboproviderApplication {

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

}

啓動之後:provider
provider2

consumer

pom.xml主要依賴:
(dubbo-spring-boot-starter兩個都要哦,一個不行)

<dependency>
   <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

配置文件application.properties:

server.port=8087
spring.application.name=dubbo-consumer

# Dubbo配置
dubbo.application.name=consumer
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=registry
#調用dubbo組建掃描的項目路徑
dubbo.scan=com.example.demo.service
#檢查服務是否可用默認爲true,不可用時拋出異常,阻止spring初始化,爲方便部署,可以改成false
dubbo.consumer.check=false

HelloController.java:

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.ConsumerService;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.alibaba.dubbo.config.annotation.Reference;

@RestController
public class HelloController {

    @Autowired
    private ConsumerService consumerService;
    @Reference(version = "userService")
    private UserService userService;

    @RequestMapping("/hello")
    public String hello() {
        User user = consumerService.testDubbo();
        System.out.println(user.toString());
        User user2 = userService.helloDubbo("I am a consumer from controller");
        System.out.println(user2.toString());
        return user.toString() + user2.toString();
    }
}

ConsumerService:

package com.example.demo.service;

import com.example.demo.entity.User;

public interface ConsumerService {
    public User testDubbo();
}

ConsumerServiceImpl:

package com.example.demo.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.demo.entity.User;
import org.springframework.stereotype.Service;

@Service
public class ConsumerServiceImpl implements ConsumerService{


    @Reference(version = "userService")
    private UserService userService;

    @Override
    public User testDubbo() {
        User user = userService.helloDubbo("service層的調用者");
        return user;
    }
}

UserService (從provider原封不動拿過來即可):

package com.example.demo.service;

import com.example.demo.entity.User;

public interface UserService {
    User helloDubbo(String name);
}

啓動類:

package com.example.demo;

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

@SpringBootApplication
@EnableDubbo
public class DemoApplication {

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

}

啓動之後:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
訪問http://localhost:8087//hello進行測試,結果:
在這裏插入圖片描述

dubbo-admin

代碼下載:官網即可:dubbo-admin
下載後idea打開,啓動
(端口號可能有衝突,遇見了就改一下)
在這裏插入圖片描述
分爲前後臺兩個部門,server+ui,都要啓動纔行,前臺使用vue,啓動語句已經在圖上標出
啓動後,瀏覽器打開訪問頁面` I Your application is running here: http://localhost:8081
結果如圖:
在這裏插入圖片描述

可以看到我們已經註冊的服務

代碼還沒上傳,後面上傳了會掛出來O(∩_∩)O哈哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章