【SpringBoot与分布式 04】

一、分布式主要的思想:常用Dubbo/Zookeeper、而SpringBoot推荐使用全栈的Spring,SpringBoot+SpringCloud

随着互联网应用的增加,业务会越来越多,如果修改一个模块就会整个应用重新部署,比如:

 RPC远程调用服务

为了解决这个问题:可以用到zookeeper+Dubbo  或者SpringBoot+SpringCloud来解决

1、先已zookeeper+Dubbo来解决

zookeeper先把订单模块注册进入,然后user模块去zk里面就找对应的订单,这样就解决了上面的问题

-----dubbo原理图-----

 Containerdobbo的服务容器,在启动时Provider(服务提供者)将服务信息注册到zk(1.register),服务消费者通过消息的订阅(2.subscribe)zk的消息,然后zk把消息推送(3.notify)给consumer,

服务如果有变更,zk也会通过长连接的方式推送给comsumer,这就意味着comsumer实时掌握着一份服务信息。如果消费者要调用,就会通过手持的这些服务者名单中通过负载均衡机制(4.invoke)

找到对应的服务,如果调用失败可以在地址列表中继续调用,知道调用成功,dubbo还有监控机制(5.count)调用的次数,时间都会给监控中心发送

#案例

1、docker先拉取zookeeper镜像

 docker pull zookeeper:latest

2、运行zookeeper

docker run --name zk01 -p 2181:2181 --restart always -d ab3f783cf9c4

ab3f783cf9c4是imageID

3、创建一个服务project工程,包含两个module,创建服务提供者和消费者

ticket(服务提供者)和user(消费者)之间的关系:ticket把信息注册到zk,user订阅zk的消息,user调用ticket的消息也是通过dubbo来完成的

4、整个dubbo -->在provider的pom文件中引入

        <!--整合dubbo-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!--整合zookeeper的客户端工具-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

5、配置provider的application.properties属性

dubbo.application.name=provider-ticket
#zk地址
dubbo.registry.address=zookeeper://172.16.203.130:2181
#扫描service下的服务发布出去
dubbo.scan.base-packagess=com.wufq.providerticket.service

6、如何发布服务-->在对应的service包下需要发布的服务类加上

@Component  //加入到spring容器中
@Service //将服务发布出去
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《长津湖》";
    }
}

7、启动provider的服务

8、消费者测试-consumer的步骤

 1)引入依赖 --和provider引入的依赖一样

 2)配置dubbo的注册中心地址 --和provider的application.properties配置的一样

dubbo.application.name=consumer-user
#zk地址
dubbo.registry.address=zookeeper://172.16.203.130:2181

   3)引用服务

 consumer中把provider的service包拷贝进入  ---》注意com.wufq的包,consumer和provider必须是一样的

测试消费者是否消费了服务者提供的服务

原文地址:https://www.cnblogs.com/frankruby/p/15439307.html