SpringBoot Dubbo整合

1. 项目整体分3个module, 主项目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>

    <groupId>cn.springbootdubbo</groupId>
    <artifactId>sbd</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>sbd-api</module>
        <module>sbd-mobile</module>
        <module>sbd-service</module>
    </modules>
</project>

2.创建api接口项目, 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>sbd</artifactId>
        <groupId>cn.springbootdubbo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>sbd-api</artifactId>
</project>

3.在api项目中创建service接口类

package cn.springbootdubbo.api.service;

/**
 * Created by GuanDS on 2019/8/14.
 */
public interface UserService {

    String get(String id);

}

4.创建service模块, 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.7.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.springbootdubbo</groupId>
    <artifactId>sbd-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sbd-service</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</artifactId>
        </dependency>

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

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

        <dependency>
            <groupId>cn.springbootdubbo</groupId>
            <artifactId>sbd-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>*.yml</exclude>
                    <exclude>*.xml</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>*.yml</include>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

5.service项目yml配置如下

server:
  port: ${PORT:8080}
  servlet:
    session:
      timeout: 600
    context-path: service

spring:
  application:
    name: sbd-service

dubbo:
  scan:
    basePackages: cn.springbootdubbo.service.impl
  application:
    id: sbd_dev
    name: sbd_dev
  registry:
    address: zookeeper://192.168.31.107:2181
  protocol:
    name: dubbo
    port: 20880

6.创建service实现类, 此处注意Service注解来源

package cn.springbootdubbo.service.impl;

import cn.springbootdubbo.api.service.UserService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * Created by GuanDS on 2019/8/14.
 */
@Component
@Service
public class UserServiceImpl implements UserService {

    @Override
    public String get(String id) {
        System.out.println(id);
        return "success";
    }
}

7.service模块启动类

@SpringBootApplication
public class SbdServiceApplication {

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

}

8.创建消费端mobile模块, 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.7.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.springbootdubbo</groupId>
    <artifactId>sbd-mobile</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sbd-mobile</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>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>
            <groupId>cn.springbootdubbo</groupId>
            <artifactId>sbd-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>*.yml</exclude>
                    <exclude>*.xml</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>*.yml</include>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

9.mobile模块yml

server:
  port: ${PORT:8081}
  servlet:
    session:
      timeout: 600
    context-path: /mobile

spring:
  application:
    name: sbd-mobile

dubbo:
  application:
    id: sbd_dev
    name: sbd_dev
  registry:
    address: zookeeper://192.168.31.107:2181

10.mobile模块controller如下

package cn.springbootdubbo.mobile.controller;

import cn.springbootdubbo.api.service.UserService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by GuanDS on 2019/8/14.
 */
@RestController
public class IndexController {

    @Reference
    private UserService userService;

    @RequestMapping("/index")
    public String doIndex(HttpServletRequest request) {
        String id =  request.getParameter("id");
        System.out.println(id);
        return userService.get(id);
    }

}

11.mobile模块启动类

@SpringBootApplication
public class SbdMobileApplication {

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

}

源代码地址: https://download.csdn.net/download/guandongsheng110/11559127

### 回答1: Spring Boot 和 Dubbo 可以搭配使用来构建分布式系统。下面是一些关于如何将它们整合在一起的提示: 1. 添加 Dubbo Starter 依赖:在 Spring Boot 项目中,您需要添加 Dubbo Starter 依赖,以便可以使用 Dubbo 相关的类和注解。您可以在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> ``` 2. 配置 Dubbo:在 application.properties 或 application.yml 文件中配置 Dubbo 相关的属性,例如应用名称、注册中心地址、协议等。 3. 编写 Dubbo 服务:在 Spring Boot 应用程序中编写 Dubbo 服务的实现类,使用 @Service 注解标记服务实现类。例如: ```java @Service public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 4. 暴露 Dubbo 服务:在服务实现类上添加 @Service 和 @DubboService 注解,其中 @DubboService 注解用于暴露服务。例如: ```java @Service @DubboService public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 5. 调用 Dubbo 服务:在 Spring Boot 应用程序中调用 Dubbo 服务,使用 @Reference 注解来自动注入服务对象。例如: ```java @RestController public class HelloController { @Reference private HelloService helloService; @GetMapping("/hello") public String hello(@RequestParam String name) { return helloService.sayHello(name); } } ``` 这些是将 Spring Boot 和 Dubbo 结合使用的基本步骤。当然,还有其他更高级的配置和用法,您可以参考 Dubbo 和 Spring Boot 的官方文档来深入学习。 ### 回答2: Spring Boot是一款开源的Java Web开发框架,它能够帮助开发人员快速构建和部署微服务应用。而Dubbo是阿里巴巴开源的一个高性能的分布式服务框架,它可以轻松地实现服务之间的远程调用和负载均衡。在实际开发中,我们常常需要将Spring Boot和Dubbo整合在一起,以实现分布式应用的开发。 Spring Boot和Dubbo整合的主要步骤如下: 1. 引入Dubbo依赖包 在pom.xml文件中添加Dubbo的依赖包,这对于Dubbo的后续使用是非常关键的。 2. 配置Dubbo服务 在Spring Boot配置文件application.yml或application.properties中,配置Dubbo相关的属性,包括zookeeper地址、Dubbo应用名称、Dubbo协议等。 3. 配置Dubbo服务提供方 Dubbo服务提供方需要以Java类的形式暴露服务,可以使用Dubbo的@Service注解进行标记。同时,需要在Dubbo服务提供方的配置文件中配置Dubbo服务提供方的端口和协议等。 4. 配置Dubbo服务消费方 Dubbo服务消费方需要以Java类的形式调用Dubbo服务,可以使用Dubbo的@Reference注解进行标记。同时,需要在Dubbo服务消费方的配置文件中配置Dubbo服务消费方的端口和协议等。 5. 启动Dubbo服务 在Spring Boot启动配置中,需要注册并启动Dubbo服务的相关组件,包括服务提供方、服务消费方和Dubbo配置。 总的来说,Spring Boot和Dubbo整合的过程需要涉及到Dubbo依赖包的引入、服务配置的编写、服务提供方和服务消费方的配置和启动等方面。通过整合,可以使得开发人员能够更快地开发分布式应用,并且避免一些常见的错误。 ### 回答3: Spring Boot和Dubbo是两个流行的Java框架,它们都为开发者提供了快速、简单和可扩展的开发体验。Spring Boot提供了一个轻量级的框架来快速构建基于Spring的应用程序,而Dubbo则提供了一种可靠的远程服务调用和治理方案。在许多情况下,开发者需要将这两个框架结合起来,以便能够更好地管理和部署分布式应用程序。下面介绍Spring Boot和Dubbo整合的步骤。 1.引入Dubbo依赖 首先,在使用Spring Boot框架开发应用程序时,需要引入Dubbo框架的依赖。可以使用Maven或Gradle等构建工具来管理项目的依赖。在pom.xml文件中添加以下配置: ``` <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>{latest.version}</version> </dependency> ``` 这个依赖将自动启用Dubbo配置,包括Dubbo服务发现、容错机制和协议等。 2.创建Dubbo服务 在Spring Boot应用程序中创建Dubbo服务非常简单,只需创建一个普通的Java接口,然后使用@DubboService注解将其标记为Dubbo服务。例如,我们可以创建一个UserService接口,如下所示: ``` public interface UserService { User getUserById(Integer id); } ``` 然后在实现类中使用@DubboService注解: ``` @Service @DubboService public class UserServiceImpl implements UserService { @Override public User getUserById(Integer id) { // TODO: query user from database return null; } } ``` 3.创建Dubbo消费者 类似于创建Dubbo服务,创建Dubbo消费者也非常简单。只需创建一个普通的Java接口,并使用@DubboReference注解来注入Dubbo服务,然后在业务逻辑中调用该服务即可。例如,我们可以创建一个OrderService接口,如下所示: ``` public interface OrderService { Order getOrderById(Integer id); } ``` 然后在消费者类中使用@DubboReference注解来注入UserService接口: ``` @Service public class OrderServiceImpl implements OrderService { @DubboReference private UserService userService; @Override public Order getOrderById(Integer id) { User user = userService.getUserById(id); Order order = new Order(); // TODO: query order from database and set user return order; } } ``` 通过以上步骤,我们已经成功集成了Spring Boot和Dubbo框架。现在我们可以使用Spring Boot的自动配置机制来快速构建Dubbo应用程序。在实际应用中,还可以使用Dubbo提供的多种协议和容错机制来保证应用程序的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值