SpringBoot2.0+Dubbo+Zookeeper 实现简单的服务调(注解版)


网上t整合DUBBO的springBoot大都是1.#版本的,现在springBoot 的版本都已经2.#了,springBoot版本升级后区别跟之前还是挺大的,网上的例子百分之九十的整合有问题(反正拉下来的代码是不能运行的),而且还都是配置xml。我个人还是喜欢升级后的springBoot,做项目也大多用的是2.#的版本。恰好,项目中正好用到了dubbo,自己整合一版就当学习!

1. 项目结构

项目地址:git 地址
说明:项目为子父模块,dubboExample为父工程,红框中的为子模块。
在这里插入图片描述

1.1 父工程 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zxf</groupId>
  <artifactId>dubboExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>dubboExample</name>
  <description>dubboExample</description>
  <packaging>pom</packaging>
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
   		<maven.compiler.target>1.8</maven.compiler.target>
        <java.version>1.8</java.version>
        <curator-framework>4.0.1</curator-framework>
		<zookeeper.version>3.4.13</zookeeper.version>
		<dubbo.starter.version>0.2.0</dubbo.starter.version>
  </properties>
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.1.RELEASE</version>
  </parent>
  <dependencies>
    <!-- SpringBoot 整合 Web组件 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  	<dependency>
     <groupId>com.alibaba.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>${dubbo.starter.version}</version>
   </dependency>
    
    
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <modules>
    	<module>consumers</module>
    	<module>providers</module>
    	<module>common</module>
    </modules>
</project>

说明:这里跟网上其他的不同,只引入<dubbo.starter.version>0.2.0</dubbo.starter.version>
是因为依赖中自己引入了zookeeper及其客户端,所以我没有额外引入。

1.2 common 模块

说明:只有一个接口,接口中有一个testRpc 方法

public interface BookService {
	String testRpc(String name);
}

1.3 providers 模块

1.3.1 pom.xml

 <!--引入common模块-->
  	<dependency>
  		<groupId>com.zxf</groupId>
  		<artifactId>common</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>

1.3.2 application.properties

server.port=8001
#注册到注册中心的名称
dubbo.application.name=service-providers
#采用协议和端口号
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#注册中心地址
dubbo.registry.address=zookeeper://localhost:2181
#控制台彩色输出
spring.output.ansi.enabled=always

1.3.3 定义BookServiceImpl 实现 BookService

package com.zxf.provider.serviceImpl;

import org.springframework.beans.factory.annotation.Value;
import com.alibaba.dubbo.config.annotation.Service;
import com.zxf.common.service.BookService;

@Service()
public class BookServiceImpl implements BookService {
	
	@Value("${server.port}")
	private String provitePort;

	@Override
	public String testRpc(String name) {
		// TODO Auto-generated method stub
		return "接受到的name=" + name + " 端口号为=" + provitePort;
	}

}

注意:这里的@Service是com.alibaba.dubbo.config.annotation.Service;

1.3.4 启动类

package com.zxf.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo
@SpringBootApplication
public class ProviderApp {
	public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(ProviderApp.class, args);
    }

}

注意:加上@EnableDubbo 它会自动扫描有“@Service”的类,将其暴露为服务。

服务提供者配置完毕,启动服务(一定先启动注册中心,要不然会报错,有关zookeeper请自己去查资料),如下所示表明服务提供者已经注册等到注册中心:
在这里插入图片描述
或者打开dubbo-admin
在这里插入图片描述

1.4 consumers 模块

1.4.1 pom.xml

<!-- 引入common模块 -->
  	<dependency>
	  	<groupId>com.zxf</groupId>
	    <artifactId>common</artifactId>
	    <version>0.0.1-SNAPSHOT</version>
  	</dependency>

1.4.2 application.properties

#tomcat端口号
server.port=8082
dubbo.application.name=service-consumers
#zookeeper注册中心的地址
dubbo.registry.address=zookeeper://localhost:2181
dubbo.protocol.name=dubbo
#dubbo默认超时为1s,有时服务调用会超过默认时间,所以设置超时稍微大一点
dubbo.consumer.timeout=5000
#控制台彩色输出
spring.output.ansi.enabled=always

1.4.3 定义 controller

package com.zxf.consumer.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zxf.common.service.BookService;

@RestController
public class BookController{

	// dubbo用@Reference 调用服务
    @Reference
    private BookService bookService;
	
    @RequestMapping(value = "testRpc/", method = RequestMethod.GET)
    @ResponseBody
    public String  testRpc(String name){

        return bookService.testRpc(name);
    }

}

注意:dubbo 中 用 @Reference 调用服务

1.4.4 启动类

package com.zxf.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo
@SpringBootApplication
public class ConsumerApp{
	public static void main(String[] args) {

	    SpringApplication.run(ConsumerApp.class, args);
    }

}

启动消费端,再查看dubbo-admin:
在这里插入图片描述
如上所示,服务提供者和服务消费者都已注册到zookeeper。
访问:http://127.0.0.1:8082/testRpc/?name=20200403,如下所示,服务调用成功:
在这里插入图片描述
至此,springBoot2.0+dubbo+zookeeper 实现服务调用完成!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值