美文网首页
笔记:Spring Boot + Dubbo实践

笔记:Spring Boot + Dubbo实践

作者: denkbug | 来源:发表于2018-03-01 17:16 被阅读0次

先用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查看结果

相关文章

网友评论

      本文标题:笔记:Spring Boot + Dubbo实践

      本文链接:https://www.haomeiwen.com/subject/hoogxftx.html