当前位置:   article > 正文

Dubbo 服务治理无注册中心 学习_不使用注册中心 如何负载均衡

不使用注册中心 如何负载均衡

Dubbo 服务治理

节点说明
节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器
调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者再启动是,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败选择另外一台服务。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心·。
springboot 无注册中心 进行远程调用
  • 新建一个父级springboot 项目

  • 新建两个子集springboot项目 (一个消费者、一个服务提供者)

  • 在pom 文件中添加 maven 依赖包(消费者和服务提供者都需要)

       </dependencies>
          <dependency>
                <groupId>com.alibaba.spring.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 先写服务提供服务、后写消费者

  • 修改服务提供的yaml 文件,

    ## 服务提供的
    server:
      # 服务端口
      port: 8089
    spring:  
       application:
             name: dubbo-api ##  dubbo 服务名称
       dubbo:
        server: true  ## 表示为dubbo 服务
        registry: N/A # 没有注册中心
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
## 消费者
server:
  # 服务端口
  port: 8088
spring:  
   application:
         name: dubbo-comsumer ##  dubbo 服务名称application:
   dubbo:
    registry: N/A # 没有注册中心
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
package com.wootop.web.service;

/**
 * TODO
 * 服务提供者的接口代码
 * @author AZHE_SUN
 * @date 2021-4-27 11:44
 **/
public interface ServiceMqtt {

    String getMessage(String s);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
package com.wootop.web.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.wootop.web.service.ServiceMqtt;
import org.springframework.stereotype.Component;


/**
 * TODO
 * 服务提供者的接口实现
 * @author AZHE_SUN
 * @date 2021-4-27 11:45
 **/

@Component
@Service(path="com.wootop.web.service.ServiceMqtt",interfaceClass = ServiceMqtt.class,group = "test")
public class ServiceMqttImpl implements ServiceMqtt {

    @Override
    public String getMessage(String msg) {
         return "provider-message:"+msg;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

服务提供者启动类

package com.wootop;


import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 启动程序
 *
 *
 */
@SpringBootApplication
@EnableDubboConfiguration # dubbo启动类
public class WooTopApplication {


    public static void main(String[] args) {
//        System.setProperty("spring.devtools.restart.enabled", "true");
        SpringApplication.run(WooTopApplication.class, args);
       System.out.println("*** 系统启动成功  ***\n" +
                "    ___       __           ________                   \n" +
                "    __ |     / /______________  __/____________      \n" +
                "    __ | /| / /_  __ \\  __ \\_  /  _  __ \\__ __ \\     \n" +
                "    __ |/ |/ / / /_/ / /_/ /  /   / /_/ /_ /_/ /     \n" +
                "    ____/|__/  \\____/\\____//_/    \\____/_ .___/      \n" +
                "                                       /_/            \n" +
                "    									               \n"
        );
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 消费者实现 (消费者包路径)
package com.wootop.web.service;

/**
 * TODO
 *  消费者接口调用
 * @author AZHE_SUN
 * @date 2021-4-27 13:38
 **/
public interface ServiceMqtt {
    String getMessage(String s);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
package com.wootop.web.service;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;

/**
 * TODO
 * 消费者的服务实现
 * @author AZHE_SUN
 * @date 2021-4-27 13:36
 **/
@Component
public class ConsumerImpl {
     /*通过url 找到服务提供者 ,并且分组 */
    @Reference(url = "dubbo://localhost:20880",group = "test")
    ServiceMqtt serviceAPI;
	
    public String getMessage(String msg){
        // 调用对应服务方法
        return serviceAPI.getMessage(msg);
    }


}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
package com.wootop;



import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;


import org.springframework.boot.SpringApplication;
import com.wootop.web.service.ConsumerImpl;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 启动程序
 *
 * @author ruoyi
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDubboConfiguration
public class WooTopApplication {

    public static void main(String[] args) {
		/* 通过bean 对象直接调用 服务 这个包名、方法名 和服务对应的包名和方法名对应*/
        ConfigurableApplicationContext run = SpringApplication.run(WooTopApplication.class, args);
        ConsumerImpl consumer=(ConsumerImpl)run.getBean("consumerImpl");
        String str = consumer.getMessage("我是consumer端");
        System.out.println(str);
      
    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/284129
推荐阅读
相关标签
  

闽ICP备14008679号