他们是否可以忽略区域或定义Eureka中接受区域的列表,例如,如果我们有3个区域(office
,shahbour
,joe
)
我希望区域shahbour
中的服务仅使用shahbour
主要和office
中定义的服务作为辅助服务,并忽略此示例joe
中的所有其他区域。
我尝试如下,并且它正在努力选择相同的区域,但如果它们在同一区域没有服务,则会在所有其他区域上进行负载平衡
spring:
profiles: shahbour
eureka:
instance:
metadataMap:
zone: shahbour
client:
region: lebanon
serviceUrl:
defaultZone: http://office:8761/eureka/
preferSameZoneEureka: true
availabilityZones:
lebanon: shahbour,office
我认为设置availabilityZones设置了这个,但事实并非如此。
这是针对开发环境,我试图设置每个开发人员将他的计算机用作区域,如果服务不存在,请使用办公室服务器作为备份,但不要使用其他开发人员。
答案 0 :(得分:1)
我没有找到任何地方在eureka中设置接受的区域列表,但我发现我们可以在ServerListFilter
中创建Ribbon
中使用的自定义Feign
Zuul
和public class DevServerListFilter extends ZonePreferenceServerListFilter {
private final List<String> acceptedZone = new ArrayList<>();
public DevServerListFilter(String[] acceptedZones) {
for (String zone: acceptedZones) {
this.acceptedZone.add(zone);
}
}
@Override
public void initWithNiwsConfig(IClientConfig niwsClientConfig) {
super.initWithNiwsConfig(niwsClientConfig);
}
@Override
public List<Server> getFilteredListOfServers(List<Server> servers) {
List<Server> zoneAffinityFiltered = super.getFilteredListOfServers(servers);
Set<Server> candidates = Sets.newHashSet(zoneAffinityFiltered);
Iterator serverIterator = candidates.iterator();
while (serverIterator.hasNext()) {
Server server = (Server)serverIterator.next();
if(!acceptedZone.contains(server.getZone())) {
zoneAffinityFiltered.remove(server);
}
}
return zoneAffinityFiltered;
}
}
以下是代码
ZonePreferenceServerListFilter
上面的过滤器通过检查接受区域列表来扩展@Configuration
@RibbonClients(defaultConfiguration = MyDefaultRibbonConfiguration.class)
public class MyRibbonConfiguration {
}
,不会忽略此列表中没有的任何服务器。
@Configuration
public class MyDefaultRibbonConfiguration {
// @Bean
// public IPing ribbonPing(IClientConfig config) {
// return new PingUrl();
// }
@Bean
public ServerListFilter<Server> ribbonServerListFilter(IClientConfig config,EurekaClientConfigBean eurekaClientConfigBean) {
String[] availabilityZones = eurekaClientConfigBean.getAvailabilityZones(eurekaClientConfigBean.getRegion());
DevServerListFilter filter = new DevServerListFilter(availabilityZones);
filter.initWithNiwsConfig(config);
return filter;
}
}
我所有客户的默认配置
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
配置代码,请注意,这必须位于documents中作为请求的@ComponentScan的排除路径中,并且我使用了可用区属性,但可以使用任何列表。