只是一个简单的小例子,分了三个小项目:
下载并启动zookeeper服务,使得接口可以被注册
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);
}
}
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
下载后idea打开,启动
(端口号可能有冲突,遇见了就改一下)
分为前后台两个部门,server+ui,都要启动才行,前台使用vue,启动语句已经在图上标出
启动后,浏览器打开访问页面` I Your application is running here: http://localhost:8081
结果如图:
可以看到我们已经注册的服务
代码还没上传,后面上传了会挂出来O(∩_∩)O哈哈~