springboot整合dubbo(详细)

这两天参考各种资料在做springboot整合dubbo,这里记录下。
整个工程由dubbo-provider和dubbo-consumer两个模块构成,完整目录如下:
具体步骤:

1.使用IDEA创建一个空的MAVEN项目

在这里插入图片描述
填写GroupId和ArtifactId
在这里插入图片描述
项目创建完成后,删除src目录,在pom.xml中添加

<packaging>pom</packaging>
<modules>
   <module>dubbo-provider</module>
    <module>dubbo-consumer</module>
</modules>

完整pom文件如下:

<?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>com.xiaobai</groupId>
   <artifactId>springboot-dubbo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>

   <modules>
      <module>dubbo-provider</module>
      <module>dubbo-consumer</module>
   </modules>


</project>

2.创建dubbo-provider子模块

新建模块
在这里插入图片描述
选择Spring Intializr
在这里插入图片描述
在这里插入图片描述
选择web(这里需要注意,如果不创建web工程的话整个dubbo-provider工程运行完就会退出)
在这里插入图片描述
在pom文件中添加dubbo-springboot依赖和zookeeper依赖:

  <dependency>
     <groupId>com.alibaba.spring.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>2.0.0</version>
  </dependency>
  <!--zookeeper依赖-->
  <dependency>
     <groupId>org.apache.zookeeper</groupId>
     <artifactId>zookeeper</artifactId>
     <version>3.4.11</version>
  </dependency>
  <dependency>
     <groupId>com.101tec</groupId>
     <artifactId>zkclient</artifactId>
     <version>0.11</version>
  </dependency>

dubbo-provider模块完整pom文件如下:

<?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.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.xiaobai</groupId>
   <artifactId>dubbo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>dubbo</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>

      <!--dubbo-springBoot依赖-->
      <dependency>
         <groupId>com.alibaba.spring.boot</groupId>
         <artifactId>dubbo-spring-boot-starter</artifactId>
         <version>2.0.0</version>
      </dependency>
      <!--zookeeper依赖-->
      <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.4.11</version>
      </dependency>
      <dependency>
         <groupId>com.101tec</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.11</version>
      </dependency>
   </dependencies>

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

</project>

修改dubbo-provider模块的application.properties配置文件内容为(我习惯用yml文件,因此这里用的是application.yml):

spring:
  dubbo:
    application:
      name: dubbo-provider
    registry:
      address: zookeeper://x.x.x.x:2181
    protocol:
      name: dubbo
      port: 20880

其中

registry:
  address: zookeeper://x.x.x.x:2181

是zookeeper的ip和端口,如果安装在本地,那么127.0.0.1:2181就可以;
接下来给dubbo-provider模块的入口类添加@EnableDubboConfiguration注解:

package com.xiaobai.dubbo;

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

@SpringBootApplication
@EnableDubboConfiguration
public class DubboApplication {

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

}

在com.xiaobai.dubbo.service下新建接口DubboProviderService.java:

package com.xiaobai.dubbo.service;

public interface DubboProviderService {
    public String provider(String name);
}

在com.xiaobai.dubbo.service.Impl下新建接口的实现类DubboProviderImpl.java:

package com.xiaobai.dubbo.service.Impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.xiaobai.dubbo.service.DubboProviderService;
import org.springframework.stereotype.Component;

@Component
@Service
public class DubboProviderImpl implements DubboProviderService {
    public String provider(String name){
        return "Hello " + name;
    }
}

这里要注意@Service注解使用的是com.alibaba.dubbo.config.annotation.Service,作用是把服务类暴露出去。

3.创建dubbo-consumer模块

按照同样的方法新建dubbo-consumer模块。
dubbo-consumer模块的pom文件中需要额外添加thymeleaf依赖,以实现动态页面的访问:

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

dubbo-consumer模块完整的pom文件如下:

    <?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.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.xiaobai</groupId>
   <artifactId>dubbo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>dubbo</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>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>

      <!--dubbo-springBoot依赖-->
      <dependency>
         <groupId>com.alibaba.spring.boot</groupId>
         <artifactId>dubbo-spring-boot-starter</artifactId>
         <version>2.0.0</version>
      </dependency>
      <!--zookeeper依赖-->
      <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.4.11</version>
      </dependency>
      <dependency>
         <groupId>com.101tec</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.11</version>
      </dependency>
   </dependencies>

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

</project>

dubbo-consumer模块的application.yml配置文件内容如下:

server:
  port: 80

spring:
  dubbo:
    application:
      name: dubbo-consumer
    registry:
      address: zookeeper://x.x.x.x:2181
    protocol:
      name: dubbo
      port: 20880

这里将端口改为80是为了防止和dubbo-provider模块冲突。
入口类同样需要添加@EnableDubboConfiguration注解。
然后在com.xiaobai.dubbo.service下新建接口DubboProviderService.java:
package com.xiaobai.dubbo.service;

public interface DubboProviderService {
    public String provider(String name);
}

在com.xiaobai.dubbo.controller下新建ConsumerController.java:

package com.xiaobai.dubbo.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xiaobai.dubbo.service.DubboProviderService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ConsumerController {
    @Reference
    private DubboProviderService dubboProviderService;
    @RequestMapping("/consumer")
    public String consumer(Model model){
        String message = dubboProviderService.provider("xiaobai");
        model.addAttribute("message",message);
        return "consumer";
    }
}

注意@Reference注解使用的是com.alibaba.dubbo.config.annotation.Reference,作用是调用dubbo-provider的服务。
接下来在resources/templates下新建consumer.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>consumer</title>
</head>
<body>
<p th:text="${message}"></p>
</body>
</html>

然后启动dubbo-provider模块的启动类,再启动dubbo-consumer模块的启动类,查看dobbo-admin控制台:
在这里插入图片描述
提供者和消费者均注册成功,此时访问http://localhost/consumer会看到
在这里插入图片描述
至此springboot和dubbo整合完成。
完整的代码以上传到github:
https://github.com/3ylh3/springboot-dubbo.git
欢迎访问我的个人博客:https://www.xiaobai.pub

下面是SpringBoot整合Dubbo详细步骤: 1. 创建SpringBoot项目,并添加Dubbo和Zookeeper的依赖。 2. 在application.properties配置Dubbo和Zookeeper的相关信息,例如: ``` # Dubbo应用名 dubbo.application.name=dubbo-provider # Dubbo注册心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 ``` 3. 创建Dubbo服务提供者的接口和实现类,并添加@Service注解。 ``` @Service public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 4. 在Dubbo服务提供者的application.properties配置服务信息,例如: ``` # Dubbo服务提供者应用名 dubbo.application.name=dubbo-provider # Dubbo注册心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # Dubbo服务提供者协议 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 # Dubbo服务提供者暴露服务 dubbo.provider.timeout=5000 dubbo.provider.token=123456 dubbo.provider.version=1.0.0 dubbo.provider.retries=2 dubbo.provider.delay=-1 ``` 5. 创建Dubbo服务消费者的接口和实现类,并添加@Reference注解。 ``` @Service public class HelloConsumerServiceImpl implements HelloConsumerService { // 注入Dubbo服务 @Reference(version = "1.0.0") private HelloService helloService; @Override public String sayHello(String name) { return helloService.sayHello(name); } } ``` 6. 在Dubbo服务消费者的application.properties配置服务信息,例如: ``` # Dubbo服务消费者应用名 dubbo.application.name=dubbo-consumer # Dubbo注册心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # Dubbo服务消费者协议 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ``` 7. 在Dubbo服务消费者调用Dubbo服务,例如: ``` @RestController public class HelloController { // 注入Dubbo服务 @Autowired private HelloConsumerService helloConsumerService; @GetMapping("/hello") public String sayHello(String name) { return helloConsumerService.sayHello(name); } } ``` 8. 启动Zookeeper,在服务提供者和服务消费者分别启动应用程序,完成Dubbo服务的注册和发现。 以上就是SpringBoot整合Dubbo详细步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值