springboot与分布式(二)—整合springcloud

本文探讨了SpringCloud与Dubbo的区别,SpringCloud作为分布式系统的整体解决方案,涵盖服务发现、负载均衡、断路器等组件。文章详细介绍了如何在SpringBoot项目中整合SpringCloud,包括创建Eureka注册中心,注册服务提供者,实现客户端负载均衡,以及搭建服务消费者的过程。
摘要由CSDN通过智能技术生成

1)springclod与dubbo的区别:
        dubbo是一个分布式服务框架,主要解决服务直接远程调用问题(服务直接的RPC);springclod是分布式的整体解决方案,在分布式系统中需要考虑的几乎所有问题(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态),都有对应的解决方案。
2)SpringCloud分布式开发五大常用组件
      服务发现——Netflix Eureka
      客服端负载均衡——Netflix Ribbon
      断路器——Netflix Hystrix
      服务网关——Netflix Zuul
      分布式配置——Spring Cloud Config
3)springboot整合springcloud
     a、创建3个模块(注册中心Eureka-server、服务提供者、服务消费者)

     配置文件

<!--注册中心-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<!--消费者/提供者-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

       c、配置注册中心模块Eureka信息

#服务端口号(注册中心)
server.port=8761
#指定eureka实例的主机名
eureka.instance.hostname=eureka-server
#eureka客户端信息
#register-with-eureka=false:不把eureka本身注册在注册中心,true时把本身也注册到注册中心
#fetch-registry=false:不从eureka上来获取服务的注册信息(因为本身是注册中心,不需要像消费者一样去获取注册信息)
#service-url:注册中心地址;默认http://localhost:8761/eureka/
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

      d、启用注册中心功能@EnableEurekaServer

      e、启动注册中心测试:访问http://127.0.0.1:8761/

    f、将服务提供者注册到注册中心
         编写一个服务 

package com.test.ticket.service;

import org.springframework.stereotype.Service;

@Service
public class TicketService {
    public String getTicket(){
        return "《故乡,故乡》";
    }
}

         为使其可以访问,编写一个controller

package com.test.ticket.controller;
import com.test.ticket.service.TicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TicketController {

    @Autowired
    TicketService ticketService;

    //springcloud在整合微服务的时候,是通过轻量级http进行通信的
    //通过http的方式将接口暴露出来
    @GetMapping("/ticket")
    public String getTicket(){
        return ticketService.getTicket();
    }
}

          配置服务提供者,将功能注册到注册中心

#服务端口(服务提供者)
server.port=8001
#服务提供者应用名
spring.application.name=provider-ticket
#注册服务时,使用服务的ip地址注册
eureka.instance.prefer-ip-address=true
#service-url:注册中心地址;默认http://localhost:8761/eureka/
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

       启动服务提供者应用,可以正常访问http://127.0.0.1:8001/ticket

       刷新注册中心,有一个应用

=====================也可以注册多个应用
       分别8001、8002应用,将其打包 

          使用java -jar命令运行服务jar包,此时如果在消费服务中开启负载均衡功能时,每次会轮流访问这两个服务(8001/8002) 

    g、消费服务
          配置消费服务者 

#定义当前应用名字
spring.application.name=consumer-user
#服务访问端口(消费者)
server.port=8200
#注册服务时,使用服务的ip地址注册
eureka.instance.prefer-ip-address=true
#service-url:注册中心地址;默认http://localhost:8761/eureka/
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

        当前应用从注册中心来发现服务,使用注解@EnableDiscoveryClient

         从eureka中调用

         编写一个处理请求,调用RestTemplate消费服务

package com.test.user.controller;

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

@RestController
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/buy")
    public String buyTicket(String name){
        //restTemplate.getForObject("http://请求的服务名/ticket",String.class)
        String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class);
        return name + "购买了" + s;
    }
}

        启动消费者服务测试,刷新注册中心,发现user也注册进来了

       访问浏览器进行测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值