Springboot2.0 Dubbo2.6 demo(api+provider+consumer)

前言:
在maven的中央仓库我们可以找到两个springboot dubbo的依赖,他们分别是两个版本:

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

在两个都有使用,里面有一些具体的区别,我都做了尝试.
经过查阅得知,2.0.0是alibaba/dubbo-spring-boot-starter,阿里捐给apache后,后者也有一个项目
apache/incubator-dubbo,目前来看,后者最近一次更新距离现在更近,所以我认为大家可以优先考虑使用 apache的项目,大家也可以参考官方给的demo.地址如下:
https://github.com/apache/incubator-dubbo

2.0.0版本

1.先写API接口
它不需要其余的依赖,只是用来作为接口被调用(简单的maven项目)

package com.dubbo.service;

import com.dubbo.model.User;

public interface UserService {
    public String sayHi(String name);
    public User getUser(int id);
}
package com.dubbo.model;

public class User {
    Integer id;
    String username;
    String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
    }

}

2.provider:
依赖:

        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>07-springboot-dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            //api的jar包,运行前先 打包api项目
        </dependency>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

配置文件:

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

service层:

package com.demo.provider.service.impl;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.model.User;
import com.dubbo.service.UserService;

@Component

@Service(
        interfaceClass=UserService.class
        )
public class UserServiceImpl implements UserService{


    @Override
    public User getUser(int id) {
        return null;
    }

    @Override
    public String sayHi(String name) {
        // TODO Auto-generated method stub
        return "hello dubbo";
    }

}

在springboot启动入口加入注解扫描dubbo的service服务(也可以使用非web启动模式,下面有用到):

package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
@EnableDubboConfiguration//引入:2.0.0依赖,里面可以使用该注解,自动扫描dubbo的service服务
@SpringBootApplication
public class Application {

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

先用(maven install )打包api项目,再启动provide项目,成功截图:
这里写图片描述

3.consumer
核心配置:

spring.application.name=dubbo-consumer-starter

controller:

package com.demo.consumer.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.UserService;

@Controller

public class UserController {

    @Reference(
            version="1.0.0",url = "dubbo://127.0.0.1:20880")
    private UserService userService;


    @ResponseBody
    @RequestMapping("/hello")
    public Object hello() {

        return userService.sayHi("aaaaa");
    }
}

运行consumer截图:
这里写图片描述

4.访问http://localhost:8080/hello
这里写图片描述

**

0.2.0

**
1.provider:
启动类:

package com.demo;

import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;


@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
         new SpringApplicationBuilder(DubboProviderApplication.class)
         .web(WebApplicationType.NONE)
         .run(args);
    }
}

核心配置文件:

# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090

# Service version
demo.service.version = 1.0.0

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages  = com.demo.provider.service

# Dubbo Config properties
## ApplicationConfig Bean
#提供发应用名称,用于计算依赖关系
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo

## ProtocolConfig Bean
#使用dubbo协议,在12345端口暴露服务
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345

## RegistryConfig Bean
#使用zookeeper注册中心暴露服务地址
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181
#dubbo.registry.address = N/A

service:

package com.demo.provider.service.impl;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.model.User;
import com.dubbo.service.UserService;

@Component

@Service(
        version = "${demo.service.version}",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
public class UserServiceImpl implements UserService{


    @Override
    public User getUser(int id) {
        return null;
    }

    @Override
    public String sayHi(String name) {
        // TODO Auto-generated method stub
        return "hello dubbo";
    }

}

先开启zookeeper服务,再开启dubbo-admin项目,运行provider
附dubbo-admin教程:https://blog.csdn.net/ZzzPaul/article/details/82315287
这里写图片描述

2.consumer:
核心配置文件

# Spring boot application

spring.application.name = dubbo-consumer-demo 
server.port = 8080

# Service Version
demo.service.version = 1.0.0

#dubbo.scan.basePackages  = com.demo.consumer.controller


# Dubbo Config properties
## ApplicationConfig Bean消费方应用名称,用于计算依赖关系,不是匹配条件,不能和提供方名称一样
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo

dubbo.registry.address = zookeeper://127.0.0.1:2181
dubbo.registry.check=false

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345

controller

package com.demo.consumer.controller;

import java.io.IOException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.UserService;

@Controller

public class UserController {

    @Reference(version = "${demo.service.version}")
    private UserService userService;

    @ResponseBody
    @RequestMapping("/hello")
    public Object hello() throws IOException {
        String a= userService.sayHi("aaaaa");
        return a;
    }
}

运行:
这里写图片描述

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