手把手教你dubbo与springboot常用两种方式整合

罗北车      2022-05-16     639

关键词:

一、Dubbo整合SpringBoot的方式(1)


 

1)直奔主题,方式一:

  pom.xml中引入dubbo-starter依赖,在application.properties配置属性,使用@Service【暴露服务】使用@Reference【引用服务】,选取的是application.properties+部分注解的方式来完成。

 

2)创建ego_interface接口模块,被提供者和消费者所使用

此模块目录结构如下:

1、实体类UserAddress

package com.sxt.domain;
import java.io.Serializable;

//实体类 必须实现序列化
public class UserAddress implements Serializable {

    private Integer id;
    private String address;
    private String userId;

    public UserAddress() {
    }
    public UserAddress(Integer id, String address, String userId) {
        this.id = id;
        this.address = address;
        this.userId = userId;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
}

2、提供者接口UserService

package com.sxt.service;
import com.sxt.domain.UserAddress;
import java.util.List;
//提供者接口
public interface UserService {

    //根据用户id查询用户地址
    public List<UserAddress> getUserAddressByUserId(String userId);
}

3、消费者接口OrderService

package com.sxt.service;
import com.sxt.domain.UserAddress;
import java.util.List;
//消费者接口
public interface OrderService{

    //初始化订单
    public List<UserAddress> initOrder(String userId);
}

3)创建boot-ego-user-service-provider提供者模块

此模块目录结构如下(config是第二种方式用的,此处请先忽略):

4)修改pom.xml加入依赖

添部分关键依赖(其余自动生成):

    <!--加入对ego_interface依赖-->
  <!--这个是上面第二步创建的你所要使用的接口类的依赖-->
<dependency> <groupId>com.sxt</groupId> <artifactId>ego_interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- 使用zk 做注册中心,Dubbo 需要的依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>

1、编写UserServiceImpl

package com.sxt.service.impl;

import com.sxt.domain.UserAddress;
import com.sxt.service.UserService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;

//此处service是apache.dubbo的 代替了创建和暴露对象
@Service
public class UserServiceImpl implements UserService {

    public static List<UserAddress> address=new ArrayList<>();

    static {
        address.add(new UserAddress(1, "天安门广场", "bj"));
        address.add(new UserAddress(2, "上海迪士尼", "sh"));
    }


    @Override
    public List<UserAddress> getUserAddressByUserId(String userId) {
        return address;
    }
}

2、修改application.properties

#application-name 本模块名字
dubbo.application.name=boot-ego-user-service-provider
#registry 指定注册中心地址(www.lcbxiuxiu.tech是我阿里云地址 请换成你自己的服务器地址)
dubbo.registry.address=zookeeper://www.lcbxiuxiu.tech:2181
#dubbo protocol 指定dubbo协议 将服务暴露在20880端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

3、修改启动类并启动

@SpringBootApplication
//此注解为了自动开启dubbo
@EnableDubbo
public class BootEgoUserServiceProviderApplication {
  public static void main(String[] args) {
        SpringApplication.run(BootEgoUserServiceProviderApplication.class, args);
    }
}

4、启动成功后画面在远程dubbo访问

5)创建boot-ego-order-service-comsumer消费者模块

此模块目录结构如下(config是第二种方式用的,此处请先忽略):

 

 

 

1、修改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 https://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.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sxt</groupId>
    <artifactId>boot-ego-order-service-comsumer</artifactId>
    <version>1.0</version>
    <name>boot-ego-order-service-comsumer</name>
    <description>springboot集成dubbo的消费者</description>

    <properties>
        <java.version>1.8</java.version>
        <dubbo.version>2.7.3</dubbo.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-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--加入对ego_interface依赖-->
        <dependency>
            <groupId>com.sxt</groupId>
            <artifactId>ego_interface</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!-- 使用zk 做注册中心,Dubbo 需要的依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

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

</project>

2、创建OrderServiceImpl

package com.sxt.service.impl;

import com.sxt.domain.UserAddress;
import com.sxt.service.OrderService;
import com.sxt.service.UserService;
import org.springframework.stereotype.Service;
import org.apache.dubbo.config.annotation.Reference;

import java.util.List;

@Service  //此处是spring的 帮你自动创建对象与注入
public class OrderServiceImpl implements OrderService {

    @Reference //此处是apache.dubbo 代替引入远程对象
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @Override
    public List<UserAddress> initOrder(String userId) {
        return this.userService.getUserAddressByUserId(userId);
    }

}

3、修改启动类并启动

package com.sxt;

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

@SpringBootApplication
@EnableDubbo
public class BootEgoOrderServiceComsumerApplication {

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

4、在测试类中测试

package com.sxt;

import com.sxt.domain.UserAddress;
import com.sxt.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.List;

@SpringBootTest
class BootEgoOrderServiceComsumerApplicationTests {

    @Autowired
    OrderService orderService;

    @Test
        void contextLoads() throws IOException {
        List<UserAddress> userAddresses = orderService.initOrder("sxt");
        for (UserAddress userAddress : userAddresses) {
            System.out.println(userAddress.getId()+" "+userAddress.getAddress());
        }
        //想在dubbo首页显示消费者 阻止程序停止
        System.in.read();
    }

}

5、修改application.properties后启动上面的测试类即可

#application.name
dubbo.application.name=boot-ego-order-service-comsumer
#address
dubbo.registry.address=zookeeper://自己的服务器地址:2181

小结第一种方式:

  1.提供者只需要在application.properties中声明:模块名字,注册中心地址,连接规则(使用什么协议,暴露什么端口)。其余的由service实现类中的@service(apache.dubbo)注解帮忙创建和暴露了对象

  2.消费者只需要在application.properties中声明:模块名字,注册中心地址。其余由service实现类中的@service(spring的)注解帮忙创建和注入对象,@Reference(apache.dubbo)帮忙引入远程服务,在测试类中就可以使用@Autowired装配对象使用其方法

 

手把手教你用jenkins自动部署springboot(代码片段)

文章目录1.什么是CI/CD1.1CI(ContinuousIntegration)1.2CD(ContinuousDelivery/ContinuousDeployment)2.什么是Jenkins3.准备工作3.1整体规划3.2准备代码3.3准备服务器4.搭建Jenkins5.安装插件6.配置Jenkins6.1基本的环境配置6.2JDK 查看详情

手把手教你利用springboot实现各种参数校验

前言本文会详细介绍SpringValidation各种场景下的最佳实践及其实现原理,死磕到底!一键获取源码地址简单使用JavaAPI规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernatevalidation是对这个规范的实现... 查看详情

手把手教你基于springboot+vue搭建个人博客网站(代码片段)

...;一个超会写bug的程序猿!利用国庆期间做了一个基于springboot+vue的前后端分离的个人博客网站,今天在这里将开发过程和大家分享一下,手把手教你搭建一个自己专属的个人博客。完整源码放置在Gitee上了,【... 查看详情

springboot三招组合拳,手把手教你打出优雅的后端接口

SpringBoot三招组合拳,手把手教你打出优雅的后端接口前言一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司要求都不... 查看详情

手把手教你从零开始搭建springboot后端项目框架

原料新鲜的IntelliJIDEA、一双手、以及电脑一台。搭建框架新建项目打开IDE,点击File->NewProject。在左侧的列表中的选择Maven项目,点击Next。填写GroupId和ArtifactId什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参... 查看详情

手把手教你从零开始搭建springboot后端项目框架

原料新鲜的IntelliJIDEA、一双手、以及电脑一台。搭建框架新建项目打开IDE,点击File->NewProject。在左侧的列表中的选择Maven项目,点击Next。填写GroupId和ArtifactId什么是GroupId和ArtifactId?大家可以参考一下google出来的定义,可以参... 查看详情

手把手教你写一个springbootstarte(代码片段)

引言上篇文章《天天用SpringBoot,它的自动装配原理却说不出来》我们有说springBoot的自动装配(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就继续来看下SpringBoot的starter吧。什么是SpringBootStarter呢?我们直接来... 查看详情

手把手教你写!字节跳动正式启动2021届秋季校招

正文这次写一下springboot与redis的结合,这里使用的是redis集群模式(主从),主从环境的搭建,请参考redis集群搭建搭建完redis集群环境后,开始springboot之旅1、REDIS介绍redis的介绍及应用场景参考redis介绍2、... 查看详情

手把手教你完成maxcomputejdbc自定义日志配置

注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分与MaxComputeJDBC相关的日志有两种,一种是由JDBC内部代码直接输出的日志,第二种是JDBC抛出异常后,由调用JDBCAPI的宿主应... 查看详情

从无到有,手把手教你用maven怒草一个springboot项目出来(代码片段)

1、使用Navicat新建一个数据库  2、新建一个数据表CREATETABLEt_user(idint(6)PRIMARYKEYauto_increment,nameVARCHAR(40),ageint(3),birTIMESTAMP) 3、新建一个project,file->new->project选择maven,webapp  填 查看详情

手把手教你基于springboot+mybatis实现员工管理系统‍附完整源码(代码片段)

...猿,一个超会写BUG的程序猿🙊!近期在学习springboot框架相关的内容,相比于SSM,SpringBoot最大的特点就是集成了Spring和SpringMVC,让之前繁琐的配置工作变得更加简洁,同时对于业务逻辑层的处理也更加... 查看详情

手把手教你基于springboot+mybatis实现员工管理系统‍附完整源码(代码片段)

...猿,一个超会写BUG的程序猿🙊!近期在学习springboot框架相关的内容,相比于SSM,SpringBoot最大的特点就是集成了Spring和SpringMVC,让之前繁琐的配置工作变得更加简洁,同时对于业务逻辑层的处理也更加... 查看详情

手把手教你学dapr-2.必须知道的概念(代码片段)

Sidecar边车DaprAPI提供Http和gRPC两种通讯方式。运行方式则可以是容器也可以是进程(Windows开发推荐使用SelfHosted,后续会解释)。这样的好处是与运行环境无关,且独立运行不需要应用包含Dapr运行时的代码。只需要... 查看详情

源码时代java干货分享|手把手教你springboot配置ssl证书(代码片段)

图说明第一步首先去阿里云弄一个免费的SSL证书下载然后放到项目里面的resource路径下这里一定要注意是key-store和key-store-password我在配置时写出了key-password弄了很久没找到原因换成了nginx去配置,最近还是嫌弃服务启动太多改... 查看详情

手把手教你用java实现一套简单的鉴权服务(springboot,ssm)(万字长文)(代码片段)

文章目录前言一、何为鉴权服务二、利用servlet+jdbc实现简单的用户登录程序1.明确思路2.手把手教你实现一个简单的web登录程序①创建web项目②编写简单的登录页面③编写servlet程序④封装jdbc操作,编写简单的数据库连接池... 查看详情

springboot之如何快速实现多文件上传?若不会,我便手把手教你详细

👨‍🎓作者:bug菌✏️博客:CSDN、掘金等💌公众号:猿圈奇妙屋🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。🙏版权声明:文章里可能部分文字或者... 查看详情

手把手教你搭建springboot+vue前后端分离(代码片段)

...界面的渲染,后端主要负责业务逻辑和数据的处理。2SpringBoot后端搭建2.1Mapper层请参阅这篇文章https://blog.csdn.net/Mr_YanMingXin/article/details/118342143此次项目的后端搭建就是在这个项目的基础上2.2Service层接口:/***@author17122*/... 查看详情

springboot之如何快速实现多文件上传?若不会,我便手把手教你详细(代码片段)

👨‍🎓作者:bug菌✏️博客:CSDN、掘金等💌公众号:猿圈奇妙屋🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。🙏版权声明:文章里可能部分文字或者... 查看详情