SpringCloud2.0 服务注册与发现 Eureka (二)

上一篇文章讲述 SpringCloud2.0 注册中心Eureka单机和集群配置 (一) 本篇讲述 注册中心与服务注册

第四部:服务注册:springcloud-2.0-eureka-provider

鼠标选中springcloud-2.0-eureka-parents 项目,右键创建Maven Model 模块
在这里插入图片描述点击下一步:NEXT
在这里插入图片描述点击FINISH 创建服务提供者模块成功。

第五步:配置服务提供者

pom.xml 配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.zeronode</groupId>
    <artifactId>springcloud-2.0-eureka-parents</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>springcloud-2.0-eureka-provider</artifactId>
  <name>springcloud-2.0-eureka-provider</name>
  
  <dependencies>
		<!-- 添加服务治理依赖包,eureka-server 服务注册与发现 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
</project>

appliaction.properties 配置信息

# 服务端口号
server.port= 8090

# 定义service-id 名称
spring.application.name=eureka-provider

# 指定当前服务提供者到注册中心
eureka.client.service-url.defaultZone=http://192.168.2.120:8080/eureka

启动类到配置:AppProvider

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaClient
@SpringBootApplication
public class AppProvider {

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

}

编写一个服务提供到rest接口测试类: ApiUserController

package com.zeronode.api.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/user")
public class ApiUserController {

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

	@GetMapping("/getUserInfo")
	public String getUserInfo() {
		return "获取会员信息到服务器端口号:" + serverPort;
	}
}

启动服务提供模块完成,再次访问注册中心,当前到Application 状态
在这里插入图片描述此时看到刚刚启动到服务提供者已经注册到EUREKA注册中心并显示当前到服务端口和service-id名称,服务提供者已经启动完成

第六步:创建服务消费者模块:springcloud-2.0-eureka-consumer

鼠标选中pom.xml项目,右键创建Maven Model 模块
在这里插入图片描述点击下一步NEXT,不需要修改信息,直接点击FINISH即可

第七步:配置服务消费者

pom.xml 配置:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.zeronode</groupId>
    <artifactId>springcloud-2.0-eureka-parents</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  
  <artifactId>springcloud-2.0-eureka-consumer</artifactId>
  
  <dependencies>
		<!-- 添加服务治理依赖包,eureka-server 服务注册与发现 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<!-- 添加ribbon 负载均衡组件依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
</project>

appliaction.properties 配置信息

# 服务端口号
server.port= 9002

# 定义service-id 名称
spring.application.name=eureka-consumer

# 指定当前服务提供者到注册中心
eureka.client.service-url.defaultZone=http://192.168.2.120:8080/eureka

启动类到配置: AppConsumer

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaClient
@SpringBootApplication
public class AppConsumer {

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

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

编写一个服务消费者rest接口测试类: UserController

package com.zeronode.controller;

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

@RestController
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	private RestTemplate restTemplate;
	/**
	 * 这种方式是rpc远程调用,没有经过注册中心调用
	 * 同时存在问题:在代码中固定服务到IP和端口,不易维护
	 * @return
	 */
	@GetMapping("/getUserInfo")
	public String getUserInfo(){
		String str = restTemplate.getForObject("http://192.168.2.120:8090/api/user/getUserInfo", String.class);
		return str;
	}
}

启动服务消费者模块,再次查看EUREKA注册中心界面
在这里插入图片描述此时注册中心包含服务提供者和服务消费者应用服务信息

在浏览器访问 :http://localhost:9002/user/getUserInfo 显示在这里插入图片描述说明服务正常调用成功,为了避免代码中固定请求服务到ip和端口,才起调用service-id方式访问,代码修改如下:

1)修改 服务消费者到Controller代码:UserController

package com.zeronode.controller;

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

@RestController
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	private RestTemplate restTemplate;
	
	/**
	 * 这种方式是rpc远程调用,经过注册中心调用
	 * 需要注意,在rest调用需要在注入restTemplate 时候添加 @LoadBalanced 注解
	 * @return
	 */
	@GetMapping("/getUserInfo")
	public String getUserInfo(){
		String str = restTemplate.getForObject("http://EUREKA-PROVIDER/aip/user/getUserInfo", String.class);
		return str;
	}
}

这种方式相对于第一种方式就很好处理ip和端口固定问题,到这里还没有完,一旦使用service-id调用远程服务,就需要在restTemplate 注入上添加@LoadBalanced 注解可以达到负载均衡效果

启动类:AppConsumer 修改

package com.zeronode;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

//@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
public class AppConsumer {

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

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

项目目录结果:
在这里插入图片描述

查考资料:

Finchley版本的官方文档如下:
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
Finchley版本的中文文档如下:
https://springcloud.cc/spring-cloud-dalston.html#_spring_cloud_netflix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值