zoukankan      html  css  js  c++  java
  • 32、SpringBoot-整合Dubbo

    分布式应用

    在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,

    Spring Boot+Spring Cloud。

    分布式系统:

     Zookeeper和Dubbo

    ZooKeeper
    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。
    它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、
    域名服务、分布式同步、组服务等。
    Dubbo 
    Dubbo是Alibaba开源的分布
    式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个
    层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo
    采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,
    所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

     

     dockers安装zookeeper

     

    官方运行的解释命令:

    启动:

    整合dubbo的依赖

    测试代码的使用:

    服务提供者:

    引入依赖:

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>

    提供服务的接口类:

    这个类在服务消费者中也要进行使用
    所以此时需要保证该类的所在包位置相同
    在开发中可以将该类与实体类提取出来,然后再引入到工程中进行使用
    如使用maven工程进行打包成jar
    package com.cr.provider.service;
    public interface TicketService {
        public String getTicket();
    }

    服务接口类的实现:

    package com.cr.provider.service.impl;
    
    import com.alibaba.dubbo.config.annotation.Service;
    import com.cr.provider.service.TicketService;
    import org.springframework.stereotype.Component;
    
    
    @Component
    //import com.alibaba.dubbo.config.annotation.Service;
    @Service//暴露服务
    public class TicketServiceImpl implements TicketService {
        @Override
        public String getTicket() {
            return "战狼2";
        }
    }
    此时的@Service是将服务的实现暴露出去,该注解中还有许多的配置,如超时等
    @Component是将该类加入到spring容器中

    配置文件: 

    #名字
    dubbo.application.name=provider
    #
    dubbo.registry.address=zookeeper://192.168.43.157:2181
    #
    dubbo.registry.protocol=zookeeper
    #
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    #
    dubbo.monitor.protocol=registry
    #
    dubbo.scan.base-packages=com.cr.provider.service

    主程序:

    package com.cr.provider;
    
    
    import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @EnableDubbo
    public class ProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    
    }
    @EnableDubbo用于开启关于dubbo的注解

    服务消费者

    引入依赖: 

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
    服务消费者调用的服务提供者实现的接口类
    此时的两个工程中的报名必须一致
    开发中使用工程引入依赖
    package com.cr.provider.service;
    
    public interface TicketService {
        public String getTicket();
    }

    用于调用TicketService实现的方法

    package com.cr.consumer.service;
    
    public interface UserService {
        public void hello();
    }

    实现类

    package com.cr.consumer.service.impl;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.cr.consumer.service.UserService;
    import com.cr.provider.service.TicketService;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        @Reference
        TicketService ticketService;
    
    
        public void hello(){
            System.out.println("ticketService:" + ticketService);
            String ticket = ticketService.getTicket();
            System.out.println("buy:" + ticket);
        }
    }
    @Reference用于自动注入dubbo容器中的服务
     
    配置:
    dubbo.application.name=consumer
    dubbo.registry.address=zookeeper://192.168.43.157:2181

    主类中:

    @EnableDubbo
    @SpringBootApplication
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }

    用于开发Dubbo的注解@EnableDubbo

    测试时:服务提供者必须处于工作的状态

    @Autowired
    UserService userService;
    @Test
    public void tt(){
        userService.hello();
    }

    测试结果:

    @Reference

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    public @interface Reference {
    
        Class<?> interfaceClass() default void.class;
    
        String interfaceName() default "";
    
        String version() default "";
    
        String group() default "";
    
        String url() default "";
    
        String client() default "";
    
        boolean generic() default false;
    
        boolean injvm() default false;
    
        boolean check() default true;
    
        boolean init() default false;
    
        boolean lazy() default false;
    
        boolean stubevent() default false;
    
        String reconnect() default "";
    
        boolean sticky() default false;
    
        String proxy() default "";
    
        String stub() default "";
    
        String cluster() default "";
    
        int connections() default 0;
    
        int callbacks() default 0;
    
        String onconnect() default "";
    
        String ondisconnect() default "";
    
        String owner() default "";
    
        String layer() default "";
    
        int retries() default 0;
    
        String loadbalance() default "";
    
        boolean async() default false;
    
        int actives() default 0;
    
        boolean sent() default false;
    
        String mock() default "";
    
        String validation() default "";
    
        int timeout() default 0;
    
        String cache() default "";
    
        String[] filter() default {};
    
        String[] listener() default {};
    
        String[] parameters() default {};
    
        String application() default "";
    
        String module() default "";
    
        String consumer() default "";
    
        String monitor() default "";
    
        String[] registry() default {};
    
    }
    

      

     @Service

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE})
    @Inherited
    public @interface Service {
    
        Class<?> interfaceClass() default void.class;
    
        String interfaceName() default "";
    
        String version() default "";
    
        String group() default "";
    
        String path() default "";
    
        boolean export() default false;
    
        String token() default "";
    
        boolean deprecated() default false;
    
        boolean dynamic() default false;
    
        String accesslog() default "";
    
        int executes() default 0;
    
        boolean register() default false;
    
        int weight() default 0;
    
        String document() default "";
    
        int delay() default 0;
    
        String local() default "";
    
        String stub() default "";
    
        String cluster() default "";
    
        String proxy() default "";
    
        int connections() default 0;
    
        int callbacks() default 0;
    
        String onconnect() default "";
    
        String ondisconnect() default "";
    
        String owner() default "";
    
        String layer() default "";
    
        int retries() default 0;
    
        String loadbalance() default "";
    
        boolean async() default false;
    
        int actives() default 0;
    
        boolean sent() default false;
    
        String mock() default "";
    
        String validation() default "";
    
        int timeout() default 0;
    
        String cache() default "";
    
        String[] filter() default {};
    
        String[] listener() default {};
    
        String[] parameters() default {};
    
        String application() default "";
    
        String module() default "";
    
        String provider() default "";
    
        String[] protocol() default {};
    
        String monitor() default "";
    
        String[] registry() default {};
    
    }
  • 相关阅读:
    c语言结构体数组引用
    c语言结构体数组定义的三种方式
    如何为SAP WebIDE开发扩展(Extension),并部署到SAP云平台上
    SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
    使用SAP API portal进行SAP SuccessFactors的API测试
    SAP UI5应用里的页面路由处理
    在SAP WebIDE Database Explorer里操作hdi实例
    如何使用SAP事务码SAT进行UI应用的性能分析
    使用SAP WebIDE进行SAP Cloud Platform Business Application开发
    SAP CRM WebClient UI ON_NEW_FOCUS的用途
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10475470.html
Copyright © 2011-2022 走看看