mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
Merge pull request #555 from mercyblitz/master
Polish spring-cloud-incubator/spring-cloud-alibaba#553 : Dubbo Spring…
This commit is contained in:
commit
d052f6e6b4
@ -18,7 +18,6 @@ package org.springframework.cloud.alibaba.dubbo.autoconfigure;
|
|||||||
|
|
||||||
import org.apache.dubbo.common.URL;
|
import org.apache.dubbo.common.URL;
|
||||||
import org.apache.dubbo.config.spring.ServiceBean;
|
import org.apache.dubbo.config.spring.ServiceBean;
|
||||||
import org.apache.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
|
|
||||||
|
|
||||||
import com.ecwid.consul.v1.agent.model.NewService;
|
import com.ecwid.consul.v1.agent.model.NewService;
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
||||||
@ -31,6 +30,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
|||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
||||||
|
import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository;
|
||||||
import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent;
|
import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent;
|
||||||
import org.springframework.cloud.client.ServiceInstance;
|
import org.springframework.cloud.client.ServiceInstance;
|
||||||
import org.springframework.cloud.client.serviceregistry.Registration;
|
import org.springframework.cloud.client.serviceregistry.Registration;
|
||||||
@ -41,7 +41,7 @@ import org.springframework.cloud.zookeeper.serviceregistry.ServiceInstanceRegist
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Collection;
|
||||||
|
|
||||||
import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME;
|
import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.CONSUL_AUTO_CONFIGURATION_CLASS_NAME;
|
||||||
import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME;
|
import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.ZOOKEEPER_AUTO_CONFIGURATION_CLASS_NAME;
|
||||||
@ -66,22 +66,21 @@ public class DubboServiceRegistrationNonWebApplicationAutoConfiguration {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private Registration registration;
|
private Registration registration;
|
||||||
|
|
||||||
private volatile Integer webPort = null;
|
private volatile Integer serverPort = null;
|
||||||
|
|
||||||
private volatile boolean registered = false;
|
private volatile boolean registered = false;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DubboServiceMetadataRepository repository;
|
||||||
|
|
||||||
@Around("execution(* org.springframework.cloud.client.serviceregistry.Registration.getPort())")
|
@Around("execution(* org.springframework.cloud.client.serviceregistry.Registration.getPort())")
|
||||||
public Object getPort(ProceedingJoinPoint pjp) throws Throwable {
|
public Object getPort(ProceedingJoinPoint pjp) throws Throwable {
|
||||||
return webPort != null ? webPort : pjp.proceed();
|
return serverPort != null ? serverPort : pjp.proceed();
|
||||||
}
|
|
||||||
|
|
||||||
@EventListener(ServiceBeanExportedEvent.class)
|
|
||||||
public void onServiceBeanExported(ServiceBeanExportedEvent event) {
|
|
||||||
setWebPort(event.getServiceBean());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventListener(ApplicationStartedEvent.class)
|
@EventListener(ApplicationStartedEvent.class)
|
||||||
public void onApplicationStarted() {
|
public void onApplicationStarted() {
|
||||||
|
setServerPort();
|
||||||
register();
|
register();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,18 +94,24 @@ public class DubboServiceRegistrationNonWebApplicationAutoConfiguration {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set web port from {@link ServiceBean#getExportedUrls() exported URLs} if "rest" protocol is present.
|
* Set web port from {@link ServiceBean#getExportedUrls() exported URLs} if "rest" protocol is present.
|
||||||
*
|
|
||||||
* @param serviceBean {@link ServiceBean}
|
|
||||||
*/
|
*/
|
||||||
private void setWebPort(ServiceBean serviceBean) {
|
private void setServerPort() {
|
||||||
if (webPort == null) {
|
if (serverPort == null) {
|
||||||
List<URL> urls = serviceBean.getExportedUrls();
|
Collection<URL> urls = repository.getRegisteredUrls();
|
||||||
urls.stream()
|
urls.stream()
|
||||||
.filter(url -> REST_PROTOCOL.equalsIgnoreCase(url.getProtocol()))
|
.filter(url -> REST_PROTOCOL.equalsIgnoreCase(url.getProtocol()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.ifPresent(url -> {
|
.ifPresent(url -> {
|
||||||
webPort = url.getPort();
|
serverPort = url.getPort();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// If REST protocol is not present, use any applied port.
|
||||||
|
if (serverPort == null) {
|
||||||
|
urls.stream()
|
||||||
|
.findAny().ifPresent(url -> {
|
||||||
|
serverPort = url.getPort();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +124,7 @@ public class DubboServiceRegistrationNonWebApplicationAutoConfiguration {
|
|||||||
|
|
||||||
@EventListener(ServiceInstancePreRegisteredEvent.class)
|
@EventListener(ServiceInstancePreRegisteredEvent.class)
|
||||||
public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) {
|
public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event) {
|
||||||
registration.setPort(webPort);
|
registration.setPort(serverPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user