步骤一 准备两个服务,provider和consumer

本文使用kotlin语言

provider是服务的提供者,由provider连接数据库

@RestController

@RequiredArgsConstructor

@RequestMapping("/provider/depart")

class DepartController(

private val departService: DepartService,

private val discoveryClient: DiscoveryClient,

private val environment: Environment

@GetMapping("/list")

fun listHandle(): MutableList {

val port = environment.getProperty("local.server.port")

println("当前服务运行在端口: $port")

return departService.findAllDeparts()

}

}

consumer是服务的消费者,consumer会去调用provider提供的服务

consumer需要添加loadbalancer

// FeignBlockingLoadBalancerClient

implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer:4.0.4'

consumer的yml此处的yml的其他部分在nacos配置中心中,关于nacos的配置中心如何使用见我的另一篇博客 【SpringCloudAlibaba系列–nacos配置中心】

spring:

application:

name: equipment-management-feign

cloud:

nacos:

config:

username: your_usr_name

password: your_pss

server-addr: xxx.xxx.xx.xx:8848

file-extension: yml

group: HardwareServices

namespace: e8c3bd64-52ff-494e-a51f-a907d9f098b8

openfeign:

client:

config:

default:

connect-timeout: 500 #设置超时时间

read-timeout: 500

compression:

request:

enabled: true #开启压缩

mime-types: ["text/xml", "application/xml", "application/json","video/mp4"]

min-request-size: 1024 #超过此数值进行压缩

response:

enabled: true

httpclient:

hc5:

enabled: true #使用hc5,默认是hc4,也可以选择OkHttp

config:

import:

- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}

EquipmentConfig从所有provider实例中,根据

n

a

m

e

获取所有的可用实例,再根据

name获取所有的可用实例,再根据

name获取所有的可用实例,再根据name随机选择一个

// 负载均衡

class EquipmentConfig {

@Bean

fun randomLoadBalancer(e:Environment,factory:LoadBalancerClientFactory):ReactorLoadBalancer{

//获取微服务名称

var name: String? = e.getProperty(LoadBalancerClientFactory.PROPERTY_NAME)

// 从所有provider实例中,根据$name获取所有的可用实例,再根据$name随机选择一个

return RandomLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier::class.java),name)

}

}

DpartController

@RestController

@RequestMapping("/consumer/depart")

@RequiredArgsConstructor

class DepartController(private val departService: DepartService) {

//查全部

@GetMapping("/list")

fun listHandle():List?=departService.listAllDeparts()

}

DepartService此处注意,下面接口中的@FeignClient(“depart-provider”, path = “/provider/depart”)这种写法是新版openfeign的唯一方式,老版可以把path中的内容写在前面

@FeignClient("depart-provider", path = "/provider/depart") // 新版唯一方式

interface DepartService {

//查全部

@GetMapping("/list")

fun listAllDeparts():List?

}

启动类在启动类上加上这句:@LoadBalancerClients(defaultConfiguration = [EquipmentConfig::class])

@LoadBalancerClients(defaultConfiguration = [EquipmentConfig::class])

@SpringBootApplication

@EnableFeignClients

class EquipmentManagement8012Application

fun main(args: Array) {

runApplication(*args)

}

启动多个provider

按照截图中的内容操作 勾选Allow multiple instances 点击Copy Configuration 注意多实例运行同一个微服务时,多个微服务不能使用同一个接口,在-Dserver.port=xxxx处指定你的接口 启动多个实例后,多次访问consumer的接口,然后查看你启动的多个provider的输出,看看是否成功 如图所示,都能访问到就是成功了

有任何问题想要探讨可以私信我

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: