由浅入深写java分布式(2) spring boot + dubbo + zookeeper详解
2017-02-17 13:16
826 查看
写了一份spring-boot + zoopkeeper + dubbo分布式调通的demo
生产者 git@github.com:WilliamGai/springboot_dubbo_provider.git
消费者 git@github.com:WilliamGai/springboot_dubbo_consumer.git
1.生产者
dubbo.properties配置文件
dubbo配置
然后mvn spring-boot:启动即可
2.消费者
dubbo.properties文件跟provider一样
接口
使用
启动后测试
生产者 git@github.com:WilliamGai/springboot_dubbo_provider.git
消费者 git@github.com:WilliamGai/springboot_dubbo_consumer.git
1.生产者
dubbo.properties配置文件
dubbo.application.name=application_hello dubbo.application.logger=slf4j #usage scena: dubbo + zookeeper dubbo.annotation.package=com.williamy.dubbo dubbo.protocol.name=dubbo dubbo.protocol.port=20883 dubbo.protocol.accessLog=true dubbo.provider.timeout=3000 dubbo.provider.retries=1 dubbo.provider.delay=-1 dubbo.registr.protocol=zookeeper dubbo.registry.address=123.56.13.70:2181 dubbo.registry.register=true dubbo.registry.subscribe=true
dubbo配置
package com.williamy.dubbo.provider; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.ProtocolConfig; import com.alibaba.dubbo.config.ProviderConfig; import com.alibaba.dubbo.config.RegistryConfig; import com.alibaba.dubbo.config.spring.AnnotationBean; import com.alibaba.dubbo.rpc.Exporter; import com.williamy.LogCore; @Configuration @ConditionalOnClass(Exporter.class) @PropertySource(value = "classpath:/dubbo.properties") public class DubboConfiguration { @Value("${dubbo.application.name}") private String applicationName; @Value("${dubbo.registr.protocol}") private String protocol; @Value("${dubbo.registry.address}") private String registryAddress; @Value("${dubbo.protocol.name}") private String protocolName; @Value("${dubbo.protocol.port}") private int protocolPort; @Value("${dubbo.provider.timeout}") private int timeout; @Value("${dubbo.provider.retries}") private int retries; @Value("${dubbo.provider.delay}") private int delay; /**设置dubbo扫描包*/ @Bean public static AnnotationBean annotationBean(@Value("${dubbo.annotation.package}") String packageName) { AnnotationBean annotationBean = new AnnotationBean(); annotationBean.setPackage(packageName); return annotationBean; } /**dubbo上下文*/ @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(this.applicationName); return applicationConfig; } /** 注册zookeeper*/ @Bean public RegistryConfig registryConfig() { RegistryConfig registry = new RegistryConfig(); registry.setProtocol(protocol); registry.setAddress(registryAddress); return registry; } /**协议 */ @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName(protocolName); protocolConfig.setPort(protocolPort); protocolConfig.setThreads(200); LogCore.RPC.info("protocolConfig:{}", protocolConfig.hashCode()); return protocolConfig; } /**服务提供者*/ @Bean(name="myProvider") public ProviderConfig providerConfig(ApplicationConfig applicationConfig, RegistryConfig registryConfig, ProtocolConfig protocolConfig) { ProviderConfig providerConfig = new ProviderConfig(); providerConfig.setTimeout(timeout); providerConfig.setRetries(retries); providerConfig.setDelay(delay); providerConfig.setApplication(applicationConfig); providerConfig.setRegistry(registryConfig); providerConfig.setProtocol(protocolConfig); return providerConfig; } }发布的服务
package com.williamy.dubbo; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Service; @Component @Service(version="1.0.0") public class HelloDubboService implements IHelloDubboService { @Override public String sayHello() { return System.getProperty("user.dir")+System.getProperty("os.name"); } }
public interface IHelloDubboService { String sayHello(); }
然后mvn spring-boot:启动即可
2.消费者
dubbo.properties文件跟provider一样
接口
package com.williamy.dubbo;消费者是i用dubbo的@Reference来声明务必保证这个接口被dubbo扫描,应在dubbo.poperties配置的扫描包内
public interface IHelloDubboService { String sayHello(); }
/** * Reference会作为消费者寻找远程服务 */ @Service public class DubboServiceHandler { @Reference(version="1.0.0") public IHelloDubboService helloservice; }
使用
package com.williamy; import java.util.Arrays; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.annotation.Service; import com.williamy.dubbo.IHelloDubboService; import com.williamy.dubbo.DubboServiceHandler; @Controller @SpringBootApplication public class App { @Autowired DubboServiceHandler testService; @Reference(version="1.0.0") IHelloDubboService helloservice; @RequestMapping("/hello") @ResponseBody String testDubboDemo() { return this.hashCode()+"Hello dubbo consumer a!"+testService.helloservice.sayHello(); } public static void main(String[] args) throws Exception { LogCore.BASE.info("app started={}", Arrays.toString(args)); ConfigurableApplicationContext context = SpringApplication.run(App.class, args); LogCore.BASE.info("app all services={}",(context.getBeansWithAnnotation(Service.class))); LogCore.BASE.info("app all referens={}",(context.getBeansWithAnnotation(Reference.class))); } }
启动后测试
相关文章推荐
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(一)
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(一)
- Spring Boot 集成Dubbo+Zookeeper实现分布式架构
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- 由浅入深写java分布式(4)基于注解 dubbo 一个app同时存在consumer和provider自启动失败的问题,以dubbo和spring注解加载顺序的问题
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(二)
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- java架构师、集群、高可扩展、高性能、高并发、性能优化、Spring boot、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(二)
- 使用dubbo+zookeeper+spring boot构建服务的方法详解
- 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目(二)
- Spring Boot + Dubbo + Zookeeper 分布式架构
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例