使用springcloud 简单搭建微服务

环境

  • IDEA

搭建eureka server

Idea 创建 项目 这边我定义得项目名为 eureka-server

1644377979(1).png

pom.xml 文件如下


    
      org.springframework.cloud
      spring-cloud-starter-netflix-eureka-server
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
      
        
          org.junit.vintage
          junit-vintage-engine
        
      
    
  

application.properties

# 应用名称
spring.application.name=eureka-server

server.port=8761

eureka.instance.hostname=eureka-server
# 本身不需要注册自己,所以将默认进行关闭
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defauleZone=http://${eureka.instance.hostname}:${server.port}/eureka/

启动文件 追加@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

END -- eureka-server 已配置好,启动即可 浏览器打开 http://localhost:8761 即可看到eureka服务页面


搭建服务1

Idea 新增项目,命名为eureka-client1记得选择是一个web服务


1644378967(1).png

配置文件 application.properties

# 应用名称
spring.application.name=eureka-client1

server.port=8080

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

启动类追加eureka注解@EnableFeignClients @EnableEurekaClient
具体内容如下

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaClient1Application {

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

启动,可以打开localhost:8761 我们可以看到创建得服务已注册到eureka

1644379113(1).png

接下来,我们来创建一个service服务 。


创建服务项目

这里我定义为eureka-client2


1644379227(1).png

配置文件 application.properties

# 应用名称
spring.application.name=eureke-client2
# 应用服务 WEB 访问端口
server.port=9990
# 注册EUREKA
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

启动文件 追加注解 @EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
public class EurekeClient2Application {

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

启动服务


1644379462(1).png

到此 两个单独得服务已经创建好了

Feign 调用

参考说明 Feign原理 (图解) - 疯狂创客圈 - 博客园 (cnblogs.com)

Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调用者

通过前面得步骤,可以发现,我在创建eureka-client1得适合增加了依赖 openFeign, 并在client1中得启动类追加了@EnableFeignClients,当client1微服务启动时,Feign会自动进行包扫描,对加了@FeignClient注解得接口,按照注解规则创建远程接口本地JDK Proxy 代理实例,然后将这些本地代理 注入到 Spring IOC容器中,当这些方法被调用时,由Proxy代理去完成真正得完成访问。并 返回结果。

摘抄:
远程接口得本地JDK Proxy 代理实例 特点

  1. Proxy代理实例: 实现一个加 @FeignClient注解得远程调用接口
  2. Proxy代理实例:在内部进行HTTP请求得封装,以及发送HTTP请求
  3. Proxy代理实例:能处理远程HTTP请求得响应,并且完成结果的额解码,然后返回给调用者

接下来,演示
在项目 eureka-client1中 新建 feign文件夹,新建 EurekaClient2的接口,返回一个User对象
User对象

@Data
public class User {
  private Long id = -1L;
  private String name = "";
}

EurekaClient2 Interface

// 此处name 为服务2 也就是eureka-client2的application名称
@FeignClient(name = "eureka-client2")
public interface EurekaClient2 {
  @GetMapping(value="/find/{id}")
  User findUser(@PathVariable(value = "id") Long id);
}

定义一个对外的请求

@RestController
public class IndexController {
  @Autowired
  private EurekaClient2 eurekaClient2;
  @GetMapping("/find")
  public String find(Long id){
    User user = eurekaClient2.findUser(id);
    return user.getName();
  }
}

在项目服务eureka-client2 新增一个查询 接口,User 对象跟client1中的属性一致就好了

@RestController
public class UserServiceController {
  @GetMapping("/find/{id}")
  public User findUser(@PathVariable(value = "id") Long id) {
    if (id == 1) {
      return new User(id,"张小白");
    } else {
      return new User(id, "Eureka-"+id);
    }
  }
}

重新启动两个服务 eureka-client1, eureka-client2

打开浏览器,我们输入 localhost:8880/find?id=1 则会返回 张小白, 输入id非1的数字,则会返回 Eureka- 此处的id为您输入的数字

代码
eureka-server
eureka-client1
eureka-client2

你可能感兴趣的:(使用springcloud 简单搭建微服务)