基于springboot和dubbo搭建SOA服务

来源:互联网 发布:js children 编辑:程序博客网 时间:2024/06/05 18:45

环境依赖

  • JDK: version 6 or higher
  • Maven: version 3 or higher

注册中心搭建

  • zookeeper机器搭建

详见zookeeper搭建

dubbo监控中心搭建

dubbo-admin 本地编译打包

dubbo的所有源码可在https://github.com/alibaba/dubbo上下载。下好之后解压

dubbo-admin部署

  • 安装
    将 dubbo-admin-2.5.4-SNAPSHOT.war 拷入 tomcat webapps中
  • 配置
    修改tomcat的端口8088,修改方法如下,打到conf下的文件 server.xml,因为zookeeper会用到8080的端口,所以为了不冲突,把Tomcat的端口改一下。

这里写图片描述

服务搭建

  • maven 依赖
<dependency>    <groupId>com.alibaba</groupId>    <artifactId>dubbo</artifactId>    <version>2.5.5</version></dependency>
  • 配置
import com.alibaba.dubbo.config.*;import com.alibaba.dubbo.config.spring.AnnotationBean;import com.alibaba.dubbo.rpc.Invoker;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;/** * Created by dream on 2017/5/9. */@Configuration@ConditionalOnClass(Invoker.class)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;    @Value("${dubbo.reference.check}")    private boolean check;    /**     * 设置dubbo扫描包     *     * @param packageName     * @return     */    @Bean    public static AnnotationBean annotationBean(@Value("${dubbo.annotation.package}") String packageName) {        AnnotationBean annotationBean = new AnnotationBean();        annotationBean.setPackage(packageName);        return annotationBean;    }    /**     * 注入dubbo上下文     *     * @return     */    @Bean    public ApplicationConfig applicationConfig() {        // 当前应用配置        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName(this.applicationName);        return applicationConfig;    }    /**     * 注入dubbo注册中心配置,基于zookeeper     *     * @return     */    @Bean    public RegistryConfig registryConfig() {        // 连接注册中心配置        RegistryConfig registry = new RegistryConfig();        registry.setProtocol(protocol);        registry.setAddress(registryAddress);        return registry;    }    /**     * 默认基于dubbo协议提供服务     *     * @return     */    @Bean    public ProtocolConfig protocolConfig() {        // 服务提供者协议配置        ProtocolConfig protocolConfig = new ProtocolConfig();        protocolConfig.setName(protocolName);        protocolConfig.setPort(protocolPort);        protocolConfig.setThreads(200);        System.out.println("默认protocolConfig:" + protocolConfig.hashCode());        return protocolConfig;    }    @Bean(name = "dubboProvider")    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;    }    /**     * dubbo消费     *     * @param applicationConfig     * @param registryConfig     * @return     */    @Bean(name="defaultConsumer")    public ConsumerConfig consumerConfig(ApplicationConfig applicationConfig, RegistryConfig registryConfig) {        ConsumerConfig consumerConfig = new ConsumerConfig();        consumerConfig.setCheck(check);        return consumerConfig;    }    public String getApplicationName() {        return applicationName;    }    public void setApplicationName(String applicationName) {        this.applicationName = applicationName;    }    public String getProtocol() {        return protocol;    }    public void setProtocol(String protocol) {        this.protocol = protocol;    }    public String getRegistryAddress() {        return registryAddress;    }    public void setRegistryAddress(String registryAddress) {        this.registryAddress = registryAddress;    }    public String getProtocolName() {        return protocolName;    }    public void setProtocolName(String protocolName) {        this.protocolName = protocolName;    }    public int getProtocolPort() {        return protocolPort;    }    public void setProtocolPort(int protocolPort) {        this.protocolPort = protocolPort;    }    public int getTimeout() {        return timeout;    }    public void setTimeout(int timeout) {        this.timeout = timeout;    }    public int getRetries() {        return retries;    }    public void setRetries(int retries) {        this.retries = retries;    }    public int getDelay() {        return delay;    }    public void setDelay(int delay) {        this.delay = delay;    }    public boolean isCheck() {        return check;    }    public void setCheck(boolean check) {        this.check = check;    }}
  • properties文件
dubbo.application.name=pay-servicedubbo.application.logger=slf4jdubbo.annotation.package=com.alibaba.dubbo.demodubbo.protocol.name=dubbodubbo.protocol.port=20880dubbo.protocol.accessLog=truedubbo.provider.timeout=3000dubbo.provider.retries=1dubbo.provider.delay=-1dubbo.registr.protocol=zookeeperdubbo.registry.address=127.0.0.1:2181dubbo.registry.register=truedubbo.reference.check=false

provider

  • 服务接口
package com.alibaba.dubbo.demo;public interface DemoService {    String sayHello(String name);}
  • 服务实现
package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.DemoService;import com.alibaba.dubbo.config.annotation.Service;@Service(version = "1.0.0", provider = "dubboProvider")public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        return "Hello " + name;    }}

consumer

package com.alibaba.dubbo.demo.consumer;import com.alibaba.dubbo.demo.DemoService;import com.alibaba.dubbo.demo.DemoConsumerService;import com.alibaba.dubbo.config.annotation.Reference;public class DemoConsumerServiceImpl implements DemoConsumerService {    @Reference(version = "1.0.0", consumer = "defaultConsumer", check = false)    private DemoService deemoService;    public String sayHello(String name) {        return deemoService.sayHello(name);    }}
阅读全文
1 0
原创粉丝点击