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;
    }
}

運行:
這裏寫圖片描述

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