springboot整合dubbo,如何搭建dubbo微服务体系?

2020-03-23 14:11:25 java常见问答 5379

随着技术的发展,微服务是目前最流行的技术,今天所讲的则是dubbo加zookeeper的微服务体系。通过springboot来整合dubbo,来搭建dubbo微服务体系,希望大家能都更加的熟练掌握哦,接下来一一解说以上的问,为大家排忧解难。

springboot整合dubbo

我们来看一下Dubbo 的RPC 调用流程,这里主要涉及到4个模块:

Registry:服务注册,我们一般会采取Zookeeper 作为我们的注册中心

Provider:服务提供者(生产者),提供具体的服务实现

Consumer:消费者,从注册中心中订阅服务

Monitor:监控中心,RPC调用次数和调用时间监控

从上图中我们可以了解到整个RPC 服务调用的过程主要为:

生产者发布服务到服务注册中心中

消费者在服务注册中心中订阅服务

消费者调用已经注册的服务

项目构建

开发环境主要涉及以下几个方面:

Spring-boot

JDK 8

Dubbo

Zookeeper

在基础环境确定好了之后,我们项目的目录结构如下:

springboot整合dubbo

上图所示,我们项目主要分为了两个模块,一部分是生产者: spring-boot-dubbo,一部分是:spring-boot-consumer。

整个项目的结构非常简单,这很符合Spring-Boot 的特性,简单便捷,下面 我们开始一步步的剖析整个项目的结构

二、Productor(生产者)

1、Pom.xml

项目依赖这一块主要使用到了基本的Spring-Boot-Web 依赖,然后我们需要额外引入Dubbo 与Zookeeper的依赖:

<dependency>
      <groupId>io.dubbo.springboot</groupId>
      <artifactId>spring-boot-starter-dubbo</artifctId>
      <version>1.0.0</version>
</dependency>
<dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.6</version>
   <exclusions>
      <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
      </exclusion>
    <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
     </exclusion>
   </exclusions>
 </dependency>

2. 配置文件

由于我们底层使用的是Spring-Boot 进行开发,那么我们就应该善于利用Spring-Boot  给我们带来的优势,因此我们可以直接在Application.properties 文件中配置Dubbo 服务:

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider ##服务名称
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181##注册中心地址
spring.dubbo.protocol.name=dubbo ##dubbo 协议
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.jaycekon.dubbo.service##声明需要暴露的服务接口

3、服务提供

在服务提供主要包括两部分,一个是暴露服务,一个是服务实现

暴露服务:即我们平常开发中所使用的的接口,这里我们创建一个 UserService 的接口,主要包括一个保存用户的方法。

import com.jaycekon.dubbo.domain.User;
/**
* Created by Jaycekon on 2017/9/19.
*/
public interface UserService {
User saveUser(User user);
}

服务实现:服务实现,与我们平常的服务一样,对接口进行实现,比较特别的是,我们这里需要使用到Dubbo 的 @Service 注解

import com.alibaba.dubbo.config.annotation.Service;
import com.jaycekon.dubbo.domain.User;
import com.jaycekon.dubbo.service.UserService;
/**
* Created by Jaycekon on 2017/9/19.
*/
@Service
public class UserServiceImpl implements UserService {
@Override
public User saveUser(User user) {
user.setId(1);
System.out.println(user.toString());
return user;
}
}

4、总体结构

Dubbo 的服务提供端,已经总体开发完成,非常简单,总体的目录结构如下:

springboot整合dubbo

三、Consumer(消费者)

1、pom.xml

消费者的相关依赖,与生产者的依赖一致。

2、配置文件

配置文件与生产者稍有区别:

## 避免和 server 工程端口冲突
server.port=8081
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.jaycekon.dubbo.service

3、服务实现

在这里,如果我们需要调用注册服务中的相关服务,则需要实现相关的接口。


例如,在这里我们需要使用到生产者中的 saveUser(User user) 方法,则需要创建一个接口,然后再调用时,使用 @Reference  注解进行引用:

import com.alibaba.dubbo.config.annotation.Reference;
import com.jaycekon.dubbo.domain.City;
import com.jaycekon.dubbo.domain.User;
import org.springframework.stereotype.Component;
/**
* 城市 Dubbo 服务消费者
*
* Created by Jaycekon on 20/09/2017.
*/
@Component
public class CityDubboConsumerService {
@Reference
CityDubboService cityDubboService;
@Reference
UserService userService;
public void printCity() {
String cityName = "广州";
City city = cityDubboService.findCityByName(cityName);
System.out.println(city.toString());
}
public User saveUser() {
User user = new User();
user.setUsername("jaycekon")
.setPassword("jaycekong824");
return userService.saveUser(user);
}
}

4、服务调用

最后,我们需要实现一个RESTful 接口,提供给用户调用:

import com.jaycekon.dubbo.service.CityDubboConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by Jaycekon on 2017/9/19.
*/
@RestController
public class UserController {
@Autowired
private CityDubboConsumerService service;
@RequestMapping("/save")
public Object saveUser() {
return service.saveUser();
}
}

5、目录结构

springboot整合dubbo

以上就是今天springboot整合dubbon的详情,更多知识,请继续关注本站。