springboot下使用dubbo的简单demo

1.一些话

  现在java后端开发大多用springboot来简化环境搭建,现在一直使用的是springcloud和k8s有关的东西,以前用过dubbo,但那会儿的开发环境搭建流程较为繁琐,而且不支持rest调用。现在简化了不少搭了一下之后发现确实比以前要方便很多了。dubbo由于是rpc调用的,速度上来说是肯定比springcloud要快一些的,不过现在也支持rest调用了,案例中两种方式都会有。不过springcloud感觉各方面的支持来说要更友好一些,所以各有千秋吧。

2.环境准备
  2.1 搭建nacos注册中心

  教程连接  https://nacos.io/zh-cn/docs/quick-start.html 

  根据连接中的地址教程搭建即可,然后访问对应的地址http://localhost:8848/nacos/index.html#/login 

  将地址端口换为设置的即可,如果出现如下界面代表成功,账号密码默认为nacos/nacos

  

  2.2ide直接新建maven项目 dubbo-service

 

   

 

   点击finish即可完成创建

2.3 创建common-api  provider   consumer三个模块分别为公用api接口,服务提供方,服务调用方

 点击新建module即可完成创建 具体创建过程略。。可到文末的源码地址下载查看具体项目,创建完的项目如下即可

  

 

 

3.引入依赖 

只需要在dubbo-service中引入依赖即可,下面的module模块会继承依赖,即dubbo-service的pom.xml文件如下所示

记住不能使用springboot太高的版本,因为目前是不支持tomcat9的。高版本的springboot会嵌入tomcat9进去

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6     <packaging>pom</packaging>
  7     <modules>
  8         <module>common-api</module>
  9         <module>provider</module>
 10         <module>consumer</module>
 11     </modules>
 12     <parent>
 13         <groupId>org.springframework.boot</groupId>
 14         <artifactId>spring-boot-starter-parent</artifactId>
 15         <version>2.0.6.RELEASE</version>
 16         <relativePath/> <!-- lookup parent from repository -->
 17     </parent>
 18     <groupId>com.dubbo</groupId>
 19     <artifactId>dubbo-service</artifactId>
 20     <version>1.0-SNAPSHOT</version>
 21 
 22     <properties>
 23         <java.version>1.8</java.version>
 24         <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
 25         <netty-all.version>4.0.35.Final</netty-all.version>
 26     </properties>
 27 
 28     <dependencies>
 29         <!--springboot有关-->
 30         <dependency>
 31             <groupId>org.springframework.boot</groupId>
 32             <artifactId>spring-boot-starter-actuator</artifactId>
 33         </dependency>
 34         <dependency>
 35             <groupId>org.springframework.boot</groupId>
 36             <artifactId>spring-boot-starter</artifactId>
 37         </dependency>
 38         <dependency>
 39             <groupId>org.springframework.boot</groupId>
 40             <artifactId>spring-boot-starter-web</artifactId>
 41         </dependency>
 42         <dependency>
 43             <groupId>org.springframework.boot</groupId>
 44             <artifactId>spring-boot-starter-test</artifactId>
 45             <scope>test</scope>
 46         </dependency>
 47 
 48         <!--dubbo有关-->
 49         <dependency>
 50             <groupId>com.alibaba</groupId>
 51             <artifactId>dubbo-registry-nacos</artifactId>
 52             <version>2.6.6</version>
 53         </dependency>
 54         <dependency>
 55             <groupId>com.alibaba.nacos</groupId>
 56             <artifactId>nacos-client</artifactId>
 57             <version>0.6.2</version>
 58         </dependency>
 59         <dependency>
 60             <groupId>com.alibaba</groupId>
 61             <artifactId>dubbo-common</artifactId>
 62             <version>2.6.6</version>
 63         </dependency>
 64         <dependency>
 65             <groupId>com.alibaba</groupId>
 66             <artifactId>dubbo-registry-api</artifactId>
 67             <version>2.6.6</version>
 68         </dependency>
 69         <dependency>
 70             <groupId>com.alibaba</groupId>
 71             <artifactId>dubbo</artifactId>
 72             <version>2.6.6</version>
 73         </dependency>
 74         <dependency>
 75             <groupId>com.alibaba.boot</groupId>
 76             <artifactId>dubbo-spring-boot-starter</artifactId>
 77             <version>0.2.1.RELEASE</version>
 78         </dependency>
 79         <dependency>
 80             <groupId>com.alibaba.boot</groupId>
 81             <artifactId>dubbo-spring-boot-autoconfigure</artifactId>
 82             <version>0.2.1.RELEASE</version>
 83         </dependency>
 84         <dependency>
 85             <groupId>io.netty</groupId>
 86             <artifactId>netty-all</artifactId>
 87             <version>${netty-all.version}</version>
 88         </dependency>
 89         <!--公用api-->
 90         <dependency>
 91             <groupId>com.dubbo</groupId>
 92             <artifactId>common-api</artifactId>
 93             <version>1.0-SNAPSHOT</version>
 94         </dependency>
 95         <!-- rest有关 -->
 96         <dependency>
 97             <groupId>org.jboss.resteasy</groupId>
 98             <artifactId>jaxrs-api</artifactId>
 99             <version>3.0.12.Final</version>
100         </dependency>
101         <dependency>
102             <groupId>org.jboss.resteasy</groupId>
103             <artifactId>resteasy-client</artifactId>
104             <version>3.0.12.Final</version>
105         </dependency>
106 
107     </dependencies>
108 
109     <build>
110         <plugins>
111             <plugin>
112                 <groupId>org.springframework.boot</groupId>
113                 <artifactId>spring-boot-maven-plugin</artifactId>
114             </plugin>
115         </plugins>
116     </build>
117 
118 </project>

  这儿注意在dubbo-service中引入了自己创建的common-api 这样的话provider和consumer项目都可以直接调用

 

4. common-api添加公用接口

 

  UserDTO为测试传输类

public class UserDTO implements Serializable {

    private String username;

    private String password;

    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;
    }

    @Override
    public String toString() {
        return "UserDTO{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

  UserService为公用api接口

public interface UserService {

    UserDTO getUserById( String id);
}

 

5.provider模块

该模块为服务提供方,因此需要实现公用api中的类,服务结构如下

 

   application.yml配置文件如下 注册中心地址根据自己配置的进行配置(使用zookeeper的同学不要直接copy着用。。) 这儿配置的支持dubbo协议与rest协议两种主流的用法
dubbo:
  application:
    name: user-provider
    id: user-provider
  registry:
    address: nacos://127.0.0.1:8848
  protocols:
    dubbo:
      name: dubbo
      port: -1
      server: tomcat
    rest:
      name: rest
      port: 8888
      server: tomcat
spring:
  application:
    name: provider-demo
  main:
    allow-bean-definition-overriding: true
server:
  port: 8085
  springboot的启动类 ProviderApplication.java类代码如下  @EnableDubbo记得开启
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}
  服务实现类UserServicImpl  此处实现的是公用api里面的接口 (仔细看好每个注解在哪个包下 不要瞎引 尤其是@Service)
package com.dubbo.provider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import dubbo.api.UserService;
import dubbo.entity.UserDTO;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

/**
 * @Description:
 * @author: zhoum
 * @Date: 2019-06-26
 * @Time: 9:50
 */
@Path("/user")
@Service(protocol = {"rest","dubbo"})
public class UserServiceImpl implements UserService {
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    @GET
    @Override
    public UserDTO getUserById(@PathParam("id") String id) {
        UserDTO u= new UserDTO();
        u.setUsername("用户名:"+id);
        u.setPassword("12346");
        return u;
    }
}
  然后启动服务 ,即可在注册中心看到对应的服务已提供

  点击详情查看即可看到分别提供了dubbo协议和rest协议的服务,到此服务发布成功

6.服务消费模块 consumer
  项目结构如下

   application.yml配置如下 记住端口不要与provider重复
dubbo:
  application:
    name: user-consumer
    id: user-consumer
  registry:
    address: nacos://127.0.0.1:8848
  protocols:
    dubbo:
      name: dubbo
      port: -2
      server: tomcat
    rest:
      name: rest
      port: 8889
      server: tomcat
spring:
  application:
    name: consumer-demo
  main:
    allow-bean-definition-overriding: true
server:
  port: 8090
  ConsumerApplication.java为springboot的启动类  也记得要加@EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ConsumerApplication.class,args);
    }
}
  WebConfig则用来增加配置下RestTemplate 方便等会儿的rest调用
@Configuration
public class WebConfig {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
  ConsumerContrller则是测试调用服务的类 UserService是引用的common-api里面的接口
package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import dubbo.api.UserService;
import dubbo.entity.UserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;

/**
 * @Description:
 * @author: zhoum
 * @Date: 2019-06-26
 * @Time: 9:55
 */
@RestController
@RequestMapping("/consumer")
public class ConsumerContoller {

    @Autowired
    private RestTemplate restTemplate;

    @Reference
    private UserService userService;

    @GetMapping("/user")
    public UserDTO getUser(){
     //rest方式调用 UserDTO user
= restTemplate.getForObject("http://localhost:8888/user/123" , UserDTO.class , new HashMap<>()); System.out.println(user);
     //传统方式调用 UserDTO wo
= userService.getUserById("wo"); return wo; } }
 启动consumer模块后,在注册中心查看

  到此服务提供者与消费者均正常发布

7.启动测试

  上面步骤中 两个模块都启动后调用consumer中的ConsumerController中的接口

  在浏览器中访问  http://localhost:8090/consumer/user

  

  同时控制台也打印出了

  

  到此,服务正常注册与发现,通过dubbo协议进行调用和rest调用都已经成功

 

最后项目的github地址为: https://github.com/hetutu5238/zmc-dubbo

转载于:https://www.cnblogs.com/hetutu-5238/p/11089577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整合Spring Boot和Dubbo的教程可以参考以下步骤: 1. 首先,创建一个Spring Boot项目。在pom.xml文件中添加Dubbo和Zookeeper的依赖。 2. 在application.yml文件中配置Dubbo的相关信息,包括应用名称、注册中心地址、服务端口等。例如: ``` server: port: 9002 dubbo: application: name: dubbo-provider protocol: port: 20880 name: dubbo host: 192.168.1.102 registry: address: zookeeper://192.168.220.136:2181 scan: base-packages: com.cz.demo spring: application: name: dubbo-provider ``` 3. 创建一个接口和实现类,用于提供Dubbo服务。例如: ```java public interface ITestOne { void test1(); } @Service(version = "1.0.0") public class TestOneImpl implements ITestOne { @Override public void test1() { // 实现具体的业务逻辑 } } ``` 4. 创建一个消费者,用于调用Dubbo服务。例如: ```java @RestController @RequestMapping("/customer") @Slf4j public class CustomerController { @Reference(version = "1.0.0") private ITestOne test; @GetMapping("/test") public String test() { log.info("----执行远程调用"); test.test1(); return "调用成功"; } } ``` 5. 运行Spring Boot应用程序,并访问消费者的接口,即可实现Dubbo服务的调用。 这是一个简单的整合Spring Boot和Dubbo的教程示例,希望对你有帮助。如果你需要更详细的教程,可以参考Dubbo官方文档或者其他相关的教程资源。 #### 引用[.reference_title] - *1* [Springboot2.x整合Dubbo详细教程](https://blog.csdn.net/m0_46267375/article/details/120368831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [springboot整合dubbo简易入门](https://blog.csdn.net/u010689849/article/details/120112099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值