SpringBoot学习笔记-14:第十四章-SpringBoot 与分布式(1)

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: SpringBoot学习笔记-14:第十四章-SpringBoot 与分布式

第十四章-SpringBoot 与分布式

Dubbo 简介

分布式应用,国内常用组合 Zookeeper + Dubbo

SpringBoot 使用 SpringCloud


Zookeeper 分布式应用程序协调服务

Dubbo Alibaba 开源的分布式服务框架,服务提供方 Provider+ 服务消费方 Consumer


安装 zookeeper


docker pull zookeeper


# EXPOSE 2181 2888 3888 8080

docker run --name zk01 -p 2181:2181 --restart always -d zookeeper


创建一个空工程,两个 spring-web 模块


provider-ticket

consumer-ticket


1、将服务提供者注册到注册中心

2、引入 dubbo 和 zkclient 依赖

3、配置 dubbo 的扫描包和注册中心地址

4、使用@Service 发布服务


https://github.com/alibaba/dubbo-spring-boot-starter


provider-ticket 提供者

引入依赖 pom.xml


<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.9</version>
</dependency>


配置 application.properties


spring.dubbo.application.name=privoder-ticket
spring.dubbo.server=true
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.example.ticket.service

服务接口


package com.example.ticket.service;
public interface TicketService {
    public String getTicket();
}



发布服务实现


package com.example.ticket.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.example.ticket.service.TicketService;
import org.springframework.stereotype.Component;
@Component
@Service // 发布服务
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "门票";
    }
}


开启配置可用

package com.example.ticket;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubboConfiguration
@SpringBootApplication
public class ProviderTicketApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderTicketApplication.class, args);
    }
}

consumer-ticket 消费者

引入依赖

<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.9</version>
</dependency>

配置 application.properties


spring.dubbo.application.name=consumer-ticket


#注册中心地址

spring.dubbo.registry.address=zookeeper://127.0.0.1:2181



暴露接口


package com.example.ticket.service;


public interface TicketService {

   public String getTicket();

}



用户服务接口


package com.example.ticket.service;


public interface UserService {

   public String getTicket();

}


用户服务实现

package com.example.ticket.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.example.ticket.service.TicketService;
import com.example.ticket.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
    @Reference
    TicketService ticketService;
    @Override
    public String getTicket() {
        return ticketService.getTicket();
    }
}

开启配置可用

package com.example.ticket;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubboConfiguration
@SpringBootApplication
public class ConsumerTicketApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerTicketApplication.class, args);
    }
}

测试

package com.example.ticket;
import com.example.ticket.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ConsumerTicketApplicationTests {
    @Autowired
    UserService userService;
    @Test
    void contextLoads() {
        String ticket = userService.getTicket();
        System.out.println(ticket);
    }
}
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
4天前
|
存储 Java 文件存储
Spring Boot中的分布式文件系统
Spring Boot中的分布式文件系统
|
2天前
|
存储 Java 数据库
Spring Boot与分布式事务的最佳实践
Spring Boot与分布式事务的最佳实践
|
4天前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot中的分布式缓存方案
|
5天前
|
消息中间件 Java 数据库
Spring Boot中如何实现分布式事务
Spring Boot中如何实现分布式事务
|
5天前
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot中的分布式缓存方案
|
5天前
|
存储 Java 数据库
Spring Boot与分布式事务的最佳实践
Spring Boot与分布式事务的最佳实践
|
5天前
|
缓存 Java 机器人
Spring Boot中如何集成Hazelcast实现分布式缓存
Spring Boot中如何集成Hazelcast实现分布式缓存
|
7天前
|
NoSQL Redis
redis分布式锁redisson
底层会尝试去加锁,如果加锁失败,会睡眠,自旋加锁,直到获取到锁为止。
13 1
|
5天前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
24 0
|
5天前
|
NoSQL 算法 Java
技术好文:Redis实现分布式锁的7种方案
技术好文:Redis实现分布式锁的7种方案