实战分布式治理方案之SpringCloudNetflix学习篇(一)

背景

考虑到单体架构的瓶颈,想必已经有很多同学开始学习微服务内容了。这里和大家一起构建一个简单的Dome;如果想要学习Spring Cloud Alibaba这套治理方案的同学肯定都知道,对于微服务治理方案,最先形成生态规模的就是Netflix,在了解Netflix解决方案之前需要先了解分布式必须面对的四大问题即:

	1.客户端如何访问
	2.服务间通信
	3.如何协调治理
	4.如果部分服务挂了怎么办

基于上述问题,Spring Cloud Netflix提供了一整套解决分布式四大问题的方案。这使得学习分布式治理,需要先彻底了解如何解决这些问题的思路。

学习篇一技术选型:

1、选择Eureka作为注册中心,解决如何治理服务的问题。
2、Ribbon作为服务间通信、并使用负载均衡(其实现实是用Fegin的比较多,不过Fegin是基于Ribbon封装的所以有必要先了解),解决服务间通信问题
在这里插入图片描述

一、愉快搭建SpringCloud Eureka

1.首先肯定是创建SpringBoot项目然后写依赖了,但是看了网上有很多在导入SpringCloud的Eureka时候遇到很多坑。导致自己的研究还没开始就结束了。

在这里插入图片描述
正确的pom.xml引用如下:
1).可以在公共服务Depend里引用下面SpringCloud包依赖

<dependencyManagement>
        <!--导入SpringCloud-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2).在本服务也就是Eureka注册服务里继承Depend的`后然后引入

    <dependencies>
        <!--导入Eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

值得注意的是
SpringBoot的版本最好不要高于 2.0.9.RELEASE 不然做测试dome会出现问题(本人亲测),原因在此,跟踪F版后发现使用的是2.0.2.RELEASE的引用。所以对SpringBoot有版本约束。这里例子就先这样使用了
在这里插入图片描述
2.就可以看看自己是否导入成功依赖,在启动类Application中加入: @EnableEurekaServer注解


@SpringBootApplication
@EnableEurekaServer
public class yourApplication {

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

}

3.再在application.yml中加入以下内容 Eureka 构建就完事了。

#自己服务名称
spring:
 application:
  name: your-eureka

server:
  port: 8081
eureka:
  instance:
    hostname: localhost
  client:
#    没有下面这两个配置,默认是客户端,加上代表自己是注册机
    registerWithEureka: false
    fetchRegistry: false
#    自己注册中心服务的地址:
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

然后访问:
在这里插入图片描述
嗯,果然是敏捷开发,就是牛逼。
在这里插入图片描述
注册中心配置完成。

二、编写生产者提供服务

1.导入上述jar
依旧是引入继承Depend后引入

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

是的,是复制的上面(承认脸)。毕竟您又不能这样
在这里插入图片描述
2.构建生产者配置

#生产者名字
spring:
  application:
     name: your-Producer
server:
 port: 8082

eureka:
 instance:
   hostname: localhost
 client:
 # 给出注册中心地址
   serviceUrl:
     defaultZone: http://localhost:8081/eureka/

这个没有复制,认真看哦!

3.加上@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient
public class yourProducer{

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

4.编写一个处理业务类

@RestController
public class AdminController {

   @Value("${server.port}")
    private String port;

   @RequestMapping(value = "hi",method = RequestMethod.GET)
   public String sayHi(String message)
   {
return String.format("Hi your message is %s port is %s",message,port);
   }
}

ok编写完成就可以运行了。
在这里插入图片描述
额,不要以为我打马赛克克是因为业务之类的,其实就是因为额,当时名字起得比较垃圾。对的不堪入目的那种。
在这里插入图片描述
额,这不是重点。既然生产者编写完毕那么我们就继续愉快的整消费者吧(我。。。艹 脱离公司项目说这句话真的爽,不过不是那个意思啦)。

三、使用SpringCloud Ribbon编写服务消费者

1.导入jar,对的消费者就只继承f父Depend这个就可以了,里面是包含的

2.启动类添加注解:@EnableEurekaClient

3.创建配置


@Configuration
public class YourProducerTemplateConfigation {

    @Bean
    //要访问负载均衡服务的生产者
    @LoadBalanced
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}

4.创建消费者需要掉用的生产者接口

@Service
public class YourProducerService {

    @Autowired
    private RestTemplate restTemplate;

    public String findHi(String message)
    {
        return restTemplate.getForObject("http://your-eureka/hi?message="+message,String.class);
    }

}

5.编写Croller

@RestController
public class YourProducerController {

 @Autowired
   YourProducerService YourProducerService;

   @RequestMapping(value = "hiWeb",method = RequestMethod.GET)
   public String sayHi(String message)
   {
      return YourProducerService.findHi(message);
   }
}

在这里插入图片描述
yourDelete就是consumer。

四、测试

调用接口
在这里插入图片描述
很明显我们看到注册中心有这个,提示,这说明你的服务没有多个节点保证。如果生产者或者消费者有一个挂掉。就会导致服务不可靠。
在这里插入图片描述
那我们其实在实际开发中可以用Docker在不同服务器启动不同服务的节点以保证服务的可靠性。在测试时我们可以这样做以生产者为例:
1.先允许服务启动多例
在这里插入图片描述
2.以8082启动,等待生产者服务启动后,修改端口为8083继续启动生产者。这样就有了两个生产者
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

好了就介绍到这里。
在这里插入图片描述
在此要特别感谢千锋教育大佬李卫民先生,在B站提供学习内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值