Spring-boot+Dubbo(直连模式)

Spring-boot+Dubbo(直连模式)Demo

这里应该有很多人会问,直连模式(什么鬼啊),一般情况下我们进行微服务开发时,都是通过zookeeper等注册中心来实现服务的提供和引用的,那直连模式没啥用啊!其实不然,直连模式大有用处,当你要验证服务是否连通或者验证服务是否成功时,直连模式可以大大节省时间,不需要每台服务器的去配zookeeper的环境了.

第一步:先搭建项目的结构

我们都知道dubbo是rpc框架,他是由服务提供者,服务消费者及注册中心组成一个最基本的结构,所以我们需要3个模块(因为我们采用直连,所以注册中心可以略过)

首先:idea中File -> new -> project -> Spring Initializr -> next -> Group+Artifact -> next…一直next下去即可,好了一个工程的外壳算是好了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后添加另外3个模块

第一个模块:provider

选中刚建的项目工程,右键 -> new -> module(模块) -> Spring Initializr -> next Group+Artifact -> next…一直next下去即可,一个provider模块就搭建好了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二个模块:consumer,与provider一致,这里便不再阐述,注:Artifact名称需要更改成consumer

第三个模块:api,与上述一致,不在阐述

why?,想必很多人都有疑问吧,第三个模块不是应该注册中心(registry)吗?因为我们采用直连模式,所以这里不需要注册中心,否则是4个模块,而api是干嘛的呢?这里名字随意,我只是根据他的功能取得名字,为了让功能更清晰,更好的解耦合,我把接口和一些common类(共用的方法)都放在api中.

附上我的项目结构图

在这里插入图片描述

第二步:开始撸代码

首先:引入需要的依赖

api:只做接口和common类提供模块,所以不需要任何依赖

provider:作为服务提供者,需要dubbo相关的依赖及接口api的依赖

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.hongsi.study</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

consumer:作为服务消费者,与provider一致

然后:在api中编写接口

接口-HelloWorld

package com.hongsi.study.api.service;

/**
 * @author mjs
 * @date 2019-11-26 17:38:00
 * @des 服务提供接口
 */
public interface HelloWorld {
    /**
     * sayHello
     * @param message
     * @return
     */
    String sayHello(String message);
}

  • provider中编写接口实现类,启动类及dubbo配置

接口实现类-HelloWorldImpl,注意@Service要用dubbo提供的

package com.hongsi.study.provider.serviceimpl;

import com.hongsi.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * @author mjs
 * @date 2019-11-26 17:40:06
 * @des 接口实现
 */
@Component   //@Component注解用来注册bean
@Service     //@Service注意要用dubbo的,不要jdk的,用来注册服务的
public class HelloWorldImpl implements HelloWorld {
    /**
     * 重写sayHello方法
     * @param message
     * @return
     */
    @Override
    public String sayHello(String message) {
        return "api-sayHello:"+message;
    }
}

provider的dubbo配置

application.properties文件的编写(.yml文件也可)

dubbo.registry.address=N/A 
dubbo.application.name=provider
dubbo.scan.base-packages=com.t3go.study.provider.serviceimpl

第一行的配置指:不使用注册中心

第二行的配置指:给当前的dubbo应用取个名字,便于识别

第三行的配置指:扫描带@Service注解的包

provider的启动类编写(注意:在dubbo中配置过了包扫描,这里可以不加@DubboComponentScan)

package com.hongsi.study.provider;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;
@DubboComponentScan(basePackages = "com.hongsi.study.provider.serviceimpl")
@EnableDubboConfig
@SpringBootApplication
public class ProviderApplication {

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

}

在consumer中编写测试方法,启动类及dubbo配置

测试方法-HelloController,注意这里引用bean要用@Refence(订阅服务)

package com.hongsi.study.consumer.controller;


import com.t3go.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;

/**
 * @author mjs
 * @date 2019-11-26 17:54:00
 * @des 测试服务是否成功
 */
@Controller
public class HelloController {
    /**
     * url:因为没有注册中心所以,消费者这里直接连接到服务提供者,
     * dubbo默认端口号为20880,可在服务提供者配置文件中修改
     */
    @Reference(url = "dubbo://localhost:20880")
    private HelloWorld helloWorld;

    public void HelloWorld(String message){
       System.out.println(helloWorld.sayHello(message));
    }
}

consumer的dubbo配置

dubbo.application.name=consumer

consumer的启动类编写

package com.t3go.study.consumer;

import com.t3go.study.consumer.controller.HelloController;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@EnableDubboConfig
@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext cac =
        SpringApplication.run(ConsumerApplication.class, args);     //获得springboot的容器,和spring差不多
        HelloController qsc = (HelloController)cac.getBean("helloController");
        qsc.HelloWorld("应该成功了吧!");
    }

}

第三步:测试

依次启动provider,consumer中的启动类.如下图,成功

provider

在这里插入图片描述

consumer

在这里插入图片描述

恭喜你,直连成功!!!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值