栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot-29高级特性-分布式(分布式、Dubbo/Zookeeper、SpringBoot/Cloud)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot-29高级特性-分布式(分布式、Dubbo/Zookeeper、SpringBoot/Cloud)

服务拆分成多个模块部署,由注册中心统一管理分配。
A服务需要调用B服务,需要先调用注册中心,再由注册中心找到B服务;

组合一:Dubbo+Zookeeper

Zookeeper
注册中心:应用程序协调服务;

Dubbo
分布式服务框架:使各层解耦;

使用:需要使用docker安装镜像

(1)服务提供者需要进行的准备

第一步:创建一个服务提供者引入依赖

服务提供者为服务接口类

dubbo依赖


    org.apache.dubbo
    dubbo-spring-boot-starter
    3.0.5


Zookeeper客户端工具依赖

   
            com.github.sgroschupf
            zkclient
            0.1
        

第二步:配置相关属性

  
dubbo:
  application:
    name: provider #项目名称
  registry:
    address: zookeeper://118.24.44.169:2181 #注册中心地址
  scan:
    base-packages: com.spgj.service  #需要发布的服务

第三步:@Service发布服务
给需要发布的服务接口添加dubbo的@Service注解将服务发布出去,并添加@Compent声明。

(2)服务消费者需要进行的准备
第一步:引入依赖

dubbo依赖


    org.apache.dubbo
    dubbo-spring-boot-starter
    3.0.5


Zookeeper客户端工具依赖

   
            com.github.sgroschupf
            zkclient
            0.1
        

第二步:配置dubbo注册中心地址

dubbo:
  application:
    name: customer#项目名称
  registry:
    address: zookeeper://118.24.44.169:2181 #注册中心地址

第三步:引用服务

需要在消费者项目中放入和提供者全类名相同的服务接口,不需要实现内容;在消费者接口中远程引用@Reference提供者接口对象;
组合二:SpringBoot+Cloud

第一步:创建提供者、注册中心、消费者应用

第二步:配置
(1)注册中心

配置:

eureka:
  instance:
    hostname: eureka #eureka实例应用名称
  
  client:
    register-with-eureka: false #不将自己注册进去
    fetch-registry: false #不从eureka获取注册信息
    service-url: 
      defaultZone: http://localhost:8761/eureka/      

启用

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}

启动注册中心并访问

(2)服务提供者

模拟提供者功能
Controller

@RestController
public class TicketController {

    @Autowired
    TicketService ticketService;

    @GetMapping("/get")
    public String getTicket(){
        return  ticketService.getTicket();
    }
}

Service

import org.springframework.stereotype.Service;

@Service
public interface TicketService {
    public String getTicket();
}

ServiceImp

package com.example.provider.Service.Imp;

import com.example.provider.Service.TicketService;

public class TicketImplementService implements TicketService {
    @Override
    public String getTicket() {
        return "购票成功";
    }
}

配置

server:
  port: 8081

spring:
  application:
    name: provider
eureka:
  instance:
    prefer-ip-address: true #注册服务使用ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

(3)服务消费

Controller功能

@RestController
public class CustomerController {

    RestTemplate restTemplate;
    
    @GetMapping("/get/ticket")
    public String getTick(){
        String a = restTemplate.getForObject("http://provider",String.class);
        return a;
    }
}

配置

server:
  port: 8083

spring:
  application:
    name: customer
    
eureka:
  instance:
    prefer-ip-address: true #注册服务使用ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

发现服务

@SpringBootApplication
@EnableDiscoveryClient
public class CustomerApplication {

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

    @Bean
//    @loadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号