阅读 雪缘a_a文章总结出的微服务学习心得(注册中心Eureka、Consumer、producer)

1.为什么需要注册中心?

可以自动管理调用链,不要我们一个个写
比如A-B-C-D-E //A调用B服务,B调用C服务…
F-C//F调用C服务
如果是我们自己编写调用链,则代码
public void A(){B()};
public void B(){C()};
public void C(){D()};
public void D(){E()};
public void F(){C()};
//一旦调用链更长,程序员就很难从代码里找出哪个服务调用哪个服务,**一旦有某个服务调用关系发生变化比如D服务调用C服务,那么调用链就得变成重新修改,不只是把C和D位置调换那么简单,还要考虑到上游B服务怎么改、F服务怎么改,下游E服务怎么修改?**实际开发中调用链很长的,把要改动服务邻近上下游服务统统都得改一遍得多费时间.
有了注册中心后,这些就简单了,注册中心会自动帮我们理清调用关系,看下文链接图片
https://www.geekdigging.com/2019/08/31/2114219821/

2.Eureka

Eureka实现服务注册和发现. Eureka分为客户端和服务端
服务端:把服务列表管理展示出来
客户端:分为service provider、service consumer
service provider:把服务注册到服务端
service consumer:获取服务列表

3.创建springcloud项目(推荐,在idea创建老是失败)

(1)打开网址:https://start.spring.io/
红色圈住地方按照我的填即可,其他的比如group这些任意填即可
在这里插入图片描述
(2)最后点击最下方Generate the project下载导入项目即可
发现pom.xml第一行报红,添加<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>修改如下:

	<properties>
		<java.version>16</java.version>
		<spring-cloud.version>2020.0.3</spring-cloud.version>
		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
	</properties>

(3)启动项目,然后浏览器输入http://localhost:8761/
注意不是输入网址http://localhost:8761/eureka/

4.集群环境注册中心

配置两个注册中心,修改defaultZone如下
在这里插入图片描述
选中项目右键run as ->run configurations->Arguments->–server.port=8781
在这里插入图片描述

然而输入http://localhost:8781/还是访问不到eureka??
(5)去掉集群,修改application.yml如下
在这里插入图片描述

5.Service Provider

(1)创建项目producer,解压导入到开发工具eclipse中
在这里插入图片描述
(2)pom.xml相对上面的增加一个依赖包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(3)主方法添加注解@EnableEurekaClient
application.yml修改如下
在这里插入图片描述

(4)先运行eureka项目再运行producer项目,说明服务已经注册了
在这里插入图片描述

6.consumers

(1)创建项目consumers,导入

在这里插入图片描述
(2)pom.xml相对producer的多了依赖包

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

(2)application.yml修改如下(其实就是把port,name的值修改)
在这里插入图片描述
(3)启动类方法加入注解@EnableEurekaClient
@EnableFeignClients报错

EnableFeignClients cannot be resolved to a type

解决方法:修改springboot和springcloud版本如下

	<properties>
		<java.version>16</java.version>
		<spring-cloud.version>Edgware.SR4</spring-cloud.version>
		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
	</properties>
<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

(4)创建远程调用接口 HelloRemote

package com.springcloud.consumers;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name= "SPRING-CLOUD-PRODUCER")
public interface HelloRemote {
    @RequestMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}

(5)创建控制器处理请求HelloController

package com.springcloud.consumers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
	 @Autowired
	    HelloRemote helloRemote;

	    @RequestMapping("/hello/{name}")
	    public String index(@PathVariable("name") String name) {
	        return helloRemote.hello(name);
	    }
}

(6)按照顺序运行Eureka、producer、consumers项目
在这里插入图片描述
注意:8084是producer端口

7.负载均衡(创建多个provider)

(1)复制consumer重命名consumer2,修改consumer2的application.yml端口为8088

(2) 修改consumer2的hellocontroller
在这里插入图片描述
(3)修改consumer2的pom.xml在这里插入图片描述

(4)输入http://localhost:8085/hello/spring
http://localhost:8088/hello?name=springcloud
http://localhost:8084/hello?name=springcloud
http://localhost:8761/
8085:consumer端口,每次刷新返回结果和上次不同
8088 8084:producer端口
8761:Eureka端口

8.用法总结:

(1)观察发现producer、consumer的application.yml除了port、name不同其他一样
(2)consumers启动类比producer多了一个注解@EnableFeignClients
(3)consumerString hello(@RequestParam(value = "name") String name);
必须和producer里的public String hello(@RequestParam String name) { return "hello "+name+",producer is ready"; }
方法名参数一致

9.参考自https://www.geekdigging.com/2019/08/31/1421851509/ 代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值