上篇博客介绍了服务注册到服务中心,服务注册后,其他服务怎么调用呢?总感觉SpringCloud的编程思路时面向切面编程,我的面向对象编程呢???
整体思路:
1:新建一个SpringBoot服务用来消费,以下简称“user服务”,新建方法见SpringCloud之Eureka概念及使用(一) 2:user服务通过定义接口或实现类,访问服务提供者的server层或controller层
3:user服务的controller层引用定义的接口或实现类,将值返回到页面;
创建user服务有两种方法;1:RestTemplate(robbin)相当于工具类;2:FeigClient相当于远程接口调用。个人感觉FeigClient比较好用,实现方式如下
一:RestTemplate实现

  1. pom.xml中追加jar包定义
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>eurekaUser</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eurekaUser</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
	</properties>

	<dependencies>
		<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-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

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

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>

</project>

2.配置application.properties

server.port: 8090
spring.application.name=eurekaUser
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
  1. 新建RestTemplateConfig.java
@Configuration
public class RestTemplateConfig  {

	@Bean
	@LoadBalanced // 启用ribbon工具
	public RestTemplate createTemplate() {
		return new RestTemplate();
	}
  1. 注入RestTemplate对象调用服务
@RestController
public class UserController {
	@Autowired
	private  RestTemplate  template;
	
	@RequestMapping(value="/select",method=RequestMethod.GET)
    public String viewDept(){
        //url=http://注册服务名/@RequestMapping地址
        String url1 = "http://eurekaServer:8080/findAll/";
        String s2 = template.getForObject(url1, String.class);
        System.out.println("RestTemplate模式:"+s2);
        return s2;
    }

依次启动服务中心、服务提供者、服务消费者三项服务,访问服务消费者的mapping看到服务提供者的数据,代表成功。如有问题请留言或者私信
二:FeigClient调用

  1. pom.xml中追加jar包定义,和上面的pom.xml文件jar包一样,为了方便我整合到一块了主要差别为
<dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

2.配置application.properties

server.port: 8090
spring.application.name=eurekaUser
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
  1. 定义远程调用接口
@FeignClient("eurekaServer")//服务提供者向服务中心注册的服务名
public interface DeptRemote {
	 @RequestMapping("/findAll")//服务提供者的url
	  public String findAll();
}
  1. 给使用者注入 远程调用接口对象
@RestController
public class findUserController {
	@Resource
	private DeptRemote deptRemote;
	
	@RequestMapping("findUser")
	public String findUser() {
		String str = deptRemote.findAll();
		return str;
	}
  1. 给注入口类追加标记
@SpringBootApplication
@EnableDiscoveryClient//服务注册和查找都需要
@EnableFeignClients//feign调用模式需要的
public class EurekaUserApplication {

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

}

依次启动服务中心、服务提供者、服务消费者三项服务,访问服务消费者的mapping看到服务提供者的数据,代表成功。如有问题请留言或者私信

注意事项:

  1. 对于底层原理不太熟悉的同学,千万不要尝试自己去配置jar和SpringBoot和SpringCloud的版本,很容易出现不兼容情况,导致无法注入或者jar包下载失败等一系列未知问题
  2. 想服务中心注册时,名字千万千万不要写下划线,错误写法:user_id;正确写法:userId或者user-id。个人建议:写userId或许看起来比较顺眼吧。
    以上问题都是本人搭建时遇到的坑,均是折磨本人超过半个小时以上的,千万注意!!!