只是一個簡單的小例子,分了三個小項目:
- 接口提供者provider
- 消費者consumer
- 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);
}
}
啓動之後:
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哈哈~