From 2b5f7dc7244f39cd1bea31da86611e118edbc7e3 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Mon, 15 Apr 2019 15:22:31 +0800 Subject: [PATCH] Polish spring-cloud-incubator/spring-cloud-alibaba#553 : Dubbo Spring Cloud service invocations failed without REST protocol --- ...ionNonWebApplicationAutoConfiguration.java | 5 ++ .../DubboSpringCloudConsumerBootstrap.java | 27 ++++++++++- .../dubbo/service/InMemoryUserService.java | 47 +++++++++++++++++++ .../dubbo/service/InMemoryUserService.java | 47 +++++++++++++++++++ .../alibaba/dubbo/service/UserService.java | 33 +++++++++++++ 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java index 15a5190b..ecba6868 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceRegistrationNonWebApplicationAutoConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.cloud.alibaba.dubbo.registry.event.ServiceInstancePreRegisteredEvent; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.serviceregistry.Registration; @@ -77,6 +78,10 @@ public class DubboServiceRegistrationNonWebApplicationAutoConfiguration { @EventListener(ServiceBeanExportedEvent.class) public void onServiceBeanExported(ServiceBeanExportedEvent event) { setWebPort(event.getServiceBean()); + } + + @EventListener(ApplicationStartedEvent.class) + public void onApplicationStarted() { register(); } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java index 45484000..0fb73298 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java @@ -26,6 +26,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported; import org.springframework.cloud.alibaba.dubbo.service.RestService; import org.springframework.cloud.alibaba.dubbo.service.User; +import org.springframework.cloud.alibaba.dubbo.service.UserService; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; @@ -53,6 +54,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; @EnableFeignClients public class DubboSpringCloudConsumerBootstrap { + @Reference + private UserService userService; + @Reference(version = "1.0.0", protocol = "dubbo") private RestService restService; @@ -119,7 +123,28 @@ public class DubboSpringCloudConsumerBootstrap { } @Bean - public ApplicationRunner paramRunner() { + public ApplicationRunner userServiceRunner() { + return arguments -> { + + User user = new User(); + user.setId(1L); + user.setName("小马哥"); + user.setAge(33); + + // save User + System.out.printf("UserService.save(%s) : %s\n", user, userService.save(user)); + + // find all Users + System.out.printf("UserService.findAll() : %s\n", user, userService.findAll()); + + // remove User + System.out.printf("UserService.remove(%d) : %s\n", user.getId(), userService.remove(user.getId())); + + }; + } + + @Bean + public ApplicationRunner callRunner() { return arguments -> { // To call /path-variables diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java new file mode 100644 index 00000000..cd1aa8b3 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.alibaba.dubbo.service; + +import org.apache.dubbo.config.annotation.Service; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * In-Memory {@link UserService} implementation + */ +@Service(protocol = "dubbo") +public class InMemoryUserService implements UserService { + + private Map usersRepository = new HashMap<>(); + + @Override + public boolean save(User user) { + return usersRepository.put(user.getId(), user) == null; + } + + @Override + public boolean remove(Long userId) { + return usersRepository.remove(userId) != null; + } + + @Override + public Collection findAll() { + return usersRepository.values(); + } +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java new file mode 100644 index 00000000..cd1aa8b3 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.alibaba.dubbo.service; + +import org.apache.dubbo.config.annotation.Service; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * In-Memory {@link UserService} implementation + */ +@Service(protocol = "dubbo") +public class InMemoryUserService implements UserService { + + private Map usersRepository = new HashMap<>(); + + @Override + public boolean save(User user) { + return usersRepository.put(user.getId(), user) == null; + } + + @Override + public boolean remove(Long userId) { + return usersRepository.remove(userId) != null; + } + + @Override + public Collection findAll() { + return usersRepository.values(); + } +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java new file mode 100644 index 00000000..471f07bf --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.alibaba.dubbo.service; + +import java.util.Collection; + +/** + * {@link User} Service + * + * @author Mercy + */ +public interface UserService { + + boolean save(User user); + + boolean remove(Long userId); + + Collection findAll(); +}