spring boot-18.使用dubbo发布分布式服务

Posted 脆皮香蕉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot-18.使用dubbo发布分布式服务相关的知识,希望对你有一定的参考价值。

我们新建两个项目分别模拟服务的提供者和服务的消费者,spring boot 集成dubbo主要分为以下几个步骤:

1.安装zookeeper

推荐使用docker 安装,使用以下几个命令即可完成

(1)docker pull zookeeper:3.4.11

(2)docker run --name zookeeper -p 2181:2181 --restart always -d 56d414270ae3 (-d 后面为镜像ID)

2.服务提供者和服务消费者的项目中分别添加dubbo 和zookeeper依赖

       <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
    <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
    </dependency>  

3.安装dubbo管理后台

在dubbo发布的项目中有个dubbo-admin项目,可以将这个项目打成一个war包,准备一个tomcat ,将wabapps 下的ROOT 文件夹下 内容删除,将dubbo-admin.war解压至ROOT下,修改WEN-INF下的dubbo.properties中 的zookeeper地址改成自己的,为了防止端口冲突可以修改tomcat 下的conf 下的server.xml 中的端口号,然后运行bin 下的startup.bat 即可启动dubbo的管理后台,输入用户名和密码(root/root 或guest/guest)

4.编写服务代码

(1)新建一个接口,表明我们要提供的服务

package com.springboot.service.ticket;

public interface TicketService {
    public String getTicket() ;
}

(2)实现服务接口,并使用dubbo的@service标注这个服务,并将服务作为一个组件注入到IOC容器中

package com.springboot.service.ticket;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;

@Service
@Component
public class TicketServiceImpl implements TicketService{

    @Override
    public String getTicket() {
        // TODO Auto-generated method stub
        return "《碟中谍6》";
    }

}

(3)配置服务

#服务名称
dubbo.application.name=springboot-dubbo-provider #zookeeper地址
dubbo.registry.address=zookeeper://192.168.1.215:2181
#服务的扫描路径,改路径下被@service注解的都将被当成一个服务发布 dubbo.scan.base-packages=com.springboot.service dubbo.protocol.name=dubbo dubbo.protocol.port=20880

5.编写消费端代码

(1)新建和服务端一模一样的接口,包括接口所在路径也要一致

(2)调用服务。使用@Reference 将服务接口注入

package com.springboot.service.user;

import org.springframework.stereotype.Service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.springboot.service.ticket.TicketService;

@Service
public class UserService {
    
    @Reference
    TicketService ticketService;
    
    public String BuyTicket() {
        String ticket = ticketService.getTicket();
        System.out.println("买到电影票:"+ticket);
        return ticket;
    }
}

(3)配置

server.port=8081
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.application.name=springboot-dubbo-consumer
dubbo.registry.address=zookeeper://192.168.1.215:2181

(4)调用消费端服务

package com.springboot.contrller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.springboot.service.user.UserService;

@RestController
public class buyController {
    
    @Autowired
    UserService userService;
    
    @GetMapping("/buy")
    public String buy() {
        return userService.BuyTicket();
    }
}

6.发布服务,订阅服务。

分别启动服务端项目和消费端项目,即可在dubbo的管理后台看到服务提供者和消费者

调用消费端服务

 

以上是关于spring boot-18.使用dubbo发布分布式服务的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot(18)——使用Alibaba Druid DataSource

大厂面试系列:Dubbo和Spring Cloud

启动 dubbo-admin 必须要启动zookeeper吗

springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)

spring boot集成dubbo

dubbo怎么不依赖spring