Springboot 最简单的整合Dubbo框架实战案例

分布式框架,目前比较热门的是springcloud和dubbo,虽然本人也是用cloud比较多,但是避免不了,有的项目就是需要用dubbo。

那么现在就给大家整一篇,简单清晰的spirngboot从零整合dubbo。

 

先看看这个简单的整合完毕后,项目结构是这样的:

里面包含的有,公共model模块、公共interface模块; 消费者consumer1服务、消费者consumer2服务、提供者provider服务;

里面的关联关系大致是, 
a.提供者provider服务 是需要导入 公共model模块、公共interface模块 的,因为写的接口实现类会用到model和service;

b.消费者consumer1服务、消费者consumer2服务 是需要导入 公共interface模块 的(看实际需要导入model模块或是重建相关的业务model)

对了,消费者consumer、提供者provider都是需要注册到同一个zookpeer上去的,这样提供者才能通过注册中心将需要向外提供的接口暴露;消费者才能通过注册中心扫描使用相关的接口。

简单介绍先到这(深入理解可以额外去网上研究,这里只做整合实战介绍)。

 

首先我们创建一个Maven项目,然后建一个Module 起名为dubbomodel,

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>testdubbo</artifactId>
        <groupId>springboot-dubbo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-model</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>


    </dependencies>

</project>

ps:上面导入了lombok jar包其实仅仅为了省事,通过注解去弄set、get、构造等等方法,也可以不导入

然后简单建一个User.java:

package top.test.model.user.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author:JCccc
 * @Description:
 * @Date: created in 10:09 2019/5/5
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private 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;
    }
}

OK,公共model模块就这样先。

接着,再建一个Module,起名为dubbointerface:

pom文件不需要导入额外jar包:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>testdubbo</artifactId>
        <groupId>springboot-dubbo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-interface</artifactId>


</project>

,建一个简单的Service,准备暴露到注册中心zookeeper去,HelloService.java:

/**
 * @Author:JCccc
 * @Description:
 * @Date: created in 11:00 2019/4/25
 */
public interface HelloService {

    public  String sayHello(String name);
}

 OK,公共interface模块就这样先。

接着,我们开始写一个 提供者provider服务,建一个Module(Springboot项目),起名为dubbo-provider:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>test-dubbo</groupId>
	<artifactId>dubbo-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>dubbo-provider</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--公共interface模块-->
		<dependency>
			<groupId>springboot-dubbo</groupId>
			<artifactId>dubbo-interface</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<!--公共model模块-->
		<dependency>
			<groupId>springboot-dubbo</groupId>
			<artifactId>dubbo-model</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>

		<!--引入dubbo的依赖-->
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>
		<!-- 引入zookeeper的依赖 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

可以看到,我们在provider服务里引入了公共的model、公共的interface、以及重要的dubbo依赖和zookeeper依赖。

接着是application.properties:


# 配置端口
server.port=8333
# 注册到本地zookeeper
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

然后写一个接口实现类HelloServiceImpl.java ,用于实现需要用到的接口(来自于导入的公共接口模块):

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import top.test.service.HelloService;

/**
 * @Author:JCccc
 * @Description:
 * @Date: created in 11:08 2019/4/25
 */
@Component
@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

 特别提醒,这里的@Service使用的是dubbo依赖包提供的com.alibaba.dubbo.config.annotation.Service 

在项目启动类需要开启dubbo自动配置注解,@EnableDubboConfiguration:

package testdubbo.dubboprovider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 开启dubbo的自动配置
@EnableDubboConfiguration
public class DubboProviderApplication {

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

}

 

OK,provider就这样先。

接着我们开始写一个消费者consumer ,建一个Module,起名为dubbo-consumer:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>testdubbo</groupId>
	<artifactId>dubbo-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>dubbo-consumer</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>springboot-dubbo</groupId>
			<artifactId>dubbo-interface</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<!--引入dubbo的依赖-->
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>
		<!-- 引入zookeeper的依赖 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
		
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

然后是application.properties:


# 配置端口
server.port=8433

spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

接着写一个Controller来消费一下刚刚provider暴露到注册中心的接口,HelloController.java:

package testdubbo.dubboconsumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.test.service.HelloService;

/**
 * @Author:JCccc
 * @Description:
 * @Date: created in 11:12 2019/4/25
 */
@RestController
public class HelloController {
    @Reference
    private HelloService helloService;

    @RequestMapping("/hello")
    public String hello() {
        String hello = helloService.sayHello("world");
        System.out.println(helloService.sayHello("JCccc"));
        return hello;
    }

    
}

特别提醒,@Reference 这个注解是使用dubbo去zookeeper注册中心去扫描已经暴露的接口

 

在项目启动类需要开启dubbo自动配置注解,@EnableDubboConfiguration:

package testdubbo.dubboconsumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {

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

}

OK,消费者consumer2可以自己按照这个模式扩展,这里不用重复介绍了,我们来开始测试,

先将provider服务跑起来,再将consumer服务跑起来,

用postman调下消费者consumer的接口,

可以看到成功调用到消费者服务的接口,证明简单的一个流程走通。 

OK,简单的springboot+dubbo框架整合使用到此。 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在 Spring Boot 项目中使用 Dubbo 需要进行以下步骤: 1. 添加 Dubbo 和 ZooKeeper 的依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependencies> <!-- Dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- ZooKeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.5</version> </dependency> </dependencies> ``` 2. 配置 Dubbo 和 ZooKeeper 在 `application.properties` 或 `application.yml` 中配置 Dubbo 和 ZooKeeper 的相关信息,例如: ```properties # Dubbo dubbo.application.name=my-application dubbo.registry.address=zookeeper://127.0.0.1:2181 # ZooKeeper spring.cloud.zookeeper.connect-string=127.0.0.1:2181 ``` 3. 编写 Dubbo 服务 在 Spring Boot 项目中编写 Dubbo 服务,例如: ```java @Service(version = "1.0.0") public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 4. 暴露 Dubbo 服务 在 Spring Boot 项目的启动类中,使用 `@EnableDubbo` 注解开启 Dubbo 自动配置,并使用 `@DubboService` 注解暴露 Dubbo 服务,例如: ```java @SpringBootApplication @EnableDubbo public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @DubboService(version = "1.0.0") private HelloService helloService; } ``` 5. 调用 Dubbo 服务 在 Spring Boot 项目中调用 Dubbo 服务,例如: ```java @RestController public class HelloController { @DubboReference(version = "1.0.0") private HelloService helloService; @GetMapping("/hello") public String hello(@RequestParam("name") String name) { return helloService.sayHello(name); } } ``` 以上就是在 Spring Boot 项目中使用 Dubbo 的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值