欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot集成eureka,服务相互调用简单示例

程序员文章站 2022-06-13 15:32:05
...

eureka可作为微服务之间的注册中心,服务提供者在注册中心注册自己的服务,包含ip地址,端口号,消费者在注册中心订阅需要消费的服务,以下做简单示例

1:搭建Eureka注册中心

引入Eureka依赖:

<!--@1:Spring Cloud 的 eureka-server 起步依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

注意:springboot的版本要和springcloud的版本相对应,否则启动报错

进行属性配置:

# 内嵌定时 tomcat 的端口
server.port=8762
# 设置该服务注册中心的 hostname
eureka.instance.hostname=localhost
# 由于我们目前创建的应用是一个服务注册中心,而不是普通的应用,默认情况下,这个应用会向注
#册中心(也是它自己)注册它自己,设置为 false 表示禁止这种自己向自己注册的默认行为
eureka.client.register-with-eureka=false
# 表示不去检索其他的服务,因为服务注册中心本身的职责就是维护服务实例,它不需要去检索其他
#服务
eureka.client.fetch-registry=false
# 指定服务注册中心的位置
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

在服务入口处开启eureka服务端(注册中心):@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer//enreka服务端注册中心开启
public class SpringcloudEurakeApplication {

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

}

启动服务:可在后台查看分中心挂载的服务信息

http://localhost:8762/

springboot集成eureka,服务相互调用简单示例

2:提供者注册服务

引入eureka客户端依赖:

<!--SpringCloud 集成 eureka 客户端的起步依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

配置配置文件属性:

#注册到服务中心
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/

运行入口处加入注解:

@SpringBootApplication
@MapperScan(basePackages = "com.qingnian.spring.dao")
@EnableSwagger2
@EnableEurekaClient//开启客户端注册
public class SpringbootRedisApplication {

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

启动之后可以看到服务的挂载:
springboot集成eureka,服务相互调用简单示例

3:注册消费者服务,实现对提供者的调用

引入pom依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--feign外部调用依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<!--Spring Cloud 熔断器起步依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>

配置文件配置:

server.port=8083

#注册到服务中心
eureka.client.service-url.defaultZone=http://127.0.0.1:8762/eureka/

#开启服务熔断
feign.hystrix.enabled=true

主运行类注解开启:

@SpringBootApplication
@EnableFeignClients //开启 Spring Cloud Feign的支持功能
@EnableEurekaClient//开启客户端注册
public class SpringcloudFeignApplication {

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

}

使用feign进行服务之间的调用:fallback表示回调类,当代码出错时,自动调取回调类对应继承的该方法的逻辑

@FeignClient(name="sprinboot-redis",fallback = FallBack.class)
public interface StudentService {

    @RequestMapping("/swagger/get/all")
    public String getAllInfo();
}

回调类:也需要实现feign接口

@Component
public class FallBack implements StudentService {
    @Override
    public String getAllInfo() {
        return "调取失败,进行服务降级";
    }
}

控制层可以直接调取feign暴露的接口:

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("allStudent")
    public String getAllStudent(){
        return studentService.getAllInfo();
    }
}

这样就可以实现服务之间的相互调用