服务注册与发现--eureka

概要:
服务注册中心有很多如:eureka,zookeeper,consul,nacos等。
本篇主要讲eureka在代码中的基本使用及相关知识总结。

案例:实现博客管理服务(消费者)blog-server 调用用户信息服务(生产者)

项目搭建总体思路
由于项目较多,所以我在搭建的时候使用maven聚合工程,父工程(springcloud01),注册中心2个实现高可用(springcloud-eureka,springcloud-eureka02),用户信息服务(user-server),博客管理服务(blog-server)。
流程图:
在这里插入图片描述

手把手搭建代码
maven聚合工程搭建:
父工程maven依赖:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
    </parent>
    <!-- 管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

    <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

1. 搭建微服务注册中心01(10086)
maven依赖:

    <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

yml配置:

###服务端口号
server:
  port: 10086
###eureka 基本信息配置
eureka:
  instance:
    ###注册到eurekaip地址
    hostname: 127.0.0.1
  client:
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:10087/eureka/
    ###因为自己是为注册中心,不需要自己注册自己(集群时改为true)
    register-with-eureka: true
    ###因为自己是为注册中心,不需要检索服务(集群时改为true)
    fetch-registry: true
 spring:
  application:
    name: eureka-server

启动类:

@SpringBootApplication
@EnableEurekaServer
public class AppEureka {
    public static void main(String[] args) {
        SpringApplication.run(AppEureka.class, args);
    }
}

启动项目,访问localhost:10086
在这里插入图片描述
搭建微服务注册中心02(10087)
与注册中心01搭建流程一致,区别在于yml配置:

###服务端口号
server:
  port: 10087
###eureka 基本信息配置
eureka:
  instance:
    ###注册到eurekaip地址
    hostname: 127.0.0.1
  client:
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:10086/eureka/
    ###因为自己是为注册中心,不需要自己注册自己
    register-with-eureka: true
    ###因为自己是为注册中心,不需要检索服务
    fetch-registry: true
spring:
  application:
    name: eureka-server

注意:10086与10087的服务名称(serverid)必须保持一致
将10086项目停了之后访问10087
在这里插入图片描述
这样就完成了注册中心的高可用。由于一旦注册中心挂了之后,所有的微服务全部瘫痪,所以一般注册中心需要搭建集群。

2. 搭建生产者用户信息服务user-server
maven依赖

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


    <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

yml配置

###服务启动端口号
server:
  port: 10081
###服务名称(服务注册到eureka名称)
spring:
  application:
    name: user-server
###服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    ###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
    ###是否需要从eureka上获取注册信息
    fetch-registry: true

启动类:

@SpringBootApplication
@EnableEurekaClient
public class AppUserServer {
    public static void main(String[] args) {
        SpringApplication.run(AppUserServer.class, args);
    }
}

controller层

@RestController
@RequestMapping("user")
public class UserController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/getUser")
    public String getMember() {
        return "this is getUser" + serverPort;
    }
}

启动项目后修改端口再次启动(生产者服务启动2次,为后续客户端负载均衡准备)
访问eureka管理页面:localhost:10086
在这里插入图片描述
从图中可看到user-server服务启动了2个,分别为10081和10086两个端口。

3. 搭建消费者服务博客管理blog-server
maven依赖:

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

    <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

yml配置

###服务启动端口号
server:
  port: 10082
###服务名称(服务注册到eureka名称)
spring:
  application:
    name: blog-server
###服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    ###因为该应用为注册中心,不会注册自己
    register-with-eureka: true
    ###是否需要从eureka上获取注册信息
    fetch-registry: true

启动类:

@SpringBootApplication
@EnableEurekaClient
public class AppBlogServer {
    public static void main(String[] args) {
        SpringApplication.run(AppBlogServer.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力

controller层:

@RestController
@RequestMapping("blog")
public class BlogController {
	@Autowired
	private RestTemplate restTemplate;

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

	@RequestMapping("delBlog")
	public String delBlog() {
		// blog 使用rpc 远程调用技术 调用 用户服务
		String userUrl = "http://user-server/user/getUser";
		String result = restTemplate.getForObject(userUrl, String.class);
		System.out.println("博客管理服务调用用户信息服务,result:" + result);
		return result;
	}

}

启动项目,访问localhost:10082/blog/delBlog
在这里插入图片描述
再次刷新:
在这里插入图片描述
从上面2次访问可以发现,2次远程调用的服务端口不一样,说明了客户端的负载均衡生效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值