笔记:Spring Boot + Dubbo实践
2018-03-01 本文已影响0人
denkbug
先用maven创建一个多模块项目,然后编写生产者和消费者,最后运行并查看结果 (maven创建多模块项目在这一篇)
父模块
mvn archetype:generate -DgroupId=com.denk.dubbo -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
cd demo
rm -r src
vim pom.xml //<packaging>jar</packaging>替换为<packaging>pom</packaging>
子模块
mvn archetype:generate -DgroupId=com.denk.dubbo -DartifactId=demo-web-api -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.denk.dubbo -DartifactId=demo-user -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.denk.dubbo -DartifactId=demo-base -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
导入IDEA
File->New->Project from Existing Sources...->选中demo目录下的pom.xml,一路next
删除三个子模块pom.xml中的junit测试依赖,demo-user和demo-web-api的pom.xml中添加springboot依赖和dubbo依赖:
<dependencies>
<!--Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo-->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<!--common base-->
<dependency>
<groupId>com.denk.dubbo</groupId>
<artifactId>demo-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- Spring Boot-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
公共interface和model
在demo-base中添加com.denk.dubbo.iface.IUser和com.denk.dubbo.model.User
package com.denk.dubbo.iface;
public interface IUser {
String getNameById(String id);
}
package com.denk.dubbo.model;
public class User {
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
生产者实现类
在demo-user中添加com.denk.dubbo.service.UserService实现IUser
package com.denk.dubbo.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.denk.dubbo.iface.IUser;
import com.denk.dubbo.model.User;
import java.util.HashMap;
import java.util.Map;
@Service
public class UserService implements IUser {
private Map<String, User> users = new HashMap<String, User>() {{
put("1001", new User("1001", "Jone"));
put("1002", new User("1002", "Mike"));
}};
@Override
public String getNameById(String id) {
User user = users.get(id);
return user == null ? "NOT FOUND" : user.getName();
}
}
在demo-user中添加resource/application.properties配置文件,配置dubbo
## 应用访问端口
server.port=9090
## Dubbo 生产者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.denk.dubbo
消费者-对外暴露的接口
在demo-web-api中添加DemoController,调用生产者并对外提供接口
package com.denk.dubbo.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.denk.dubbo.iface.IUser;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class DemoController {
@Reference
private IUser userService;
@RequestMapping("/getNameById")
public String getNameById(String id) {
return userService.getNameById(id);
}
}
在demo-web-api中添加resource/application.properties配置文件,配置dubbo
## 应用访问端口
server.port=8080
## Dubbo 消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.denk.dubbo
配置Spring Boot启动类
修改demo-user和demo-web-api中的App.java
package com.denk.dubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
运行
启动zookeeper:./zkServer.sh start(安装方法在上一篇)
启动生产者:demo-user/App.java中右键->Run 'App.main()'
启动消费者:demo-web-api/App.java中右键->Run 'App.main()'
浏览器访问 http://127.0.0.1:8080/demo/getNameById?id=1001查看结果