绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
基于dubbo和zookeeper的微服务实现案例
2019-11-07 17:30:53

一、注册中心-zookeeper

1.zookeeper

zookeeper可以在分布式项目中承担以下几个功能:

1)注册中心

2)存储数据: 分布式锁

3)观察者模式:做到多个分布式服务器之间的数据同步


2.如何搭建zookeeper

要么使用docker搭建,要么使用原生的方式搭建。

1)在虚拟机上安装jdk

  1. 上传jdk的压缩包到虚拟机的 /usr/local/java文件夹内
  2. 解压缩

tar -zxvf jdk.....tar.gz

  1. 配置环境变量

vim /etc/profile

复制以下内容到该文件的末尾

export JAVA_HOME=/usr/local/java/jdk1.8.0_191

export JRE_HOME=/usr/local/java/jdk1.8.0_191/jre

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

  1. 保存并退出

:wq

  1. 让配置生效

source /etc/profile

2)安装Zookeeper

  1. 上传压缩包到linux
  2. 解压缩



3)获得zoo.cfg配置文件

在zookeeper/conf文件夹内,修改zoo_sample.cfg中的内容后并重命名成zoo.cfg


4)如何使用zookeeper(做注册中心)

注意: 要使用linux中的命令,必须两种方式: 要么./zkServer.sh 要么是完整路径:

/usr/local/zookeeper/zookeeper-3.4.14/bin/zkServer.sh

  1. 如何启动zk

./zkServer.sh start

  1. 如何查看zk状态

./zkServer.sh status

  1. 如何关闭zk

./zkServer.sh stop


二、使用Dubbo来实现服务间的调用


相关概念:

1) 工程: 包含多个项目的一个统称


1.创建父工程

2.在父工程中创建一个接口项目


接口项目取消父依赖






在项目中创建具体的接口




3.在父工程中创建服务的提供者




编写实现类,实现接口,并重写方法,注意要把api的项目依赖进来。




4.在服务提供者项目中使用dubbo


1)创建xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="springframework.org/sch"
xmlns:xsi="w3.org/2001/XMLSchema-i"
xmlns:dubbo="code.alibabatech.com/sc"
xsi:schemaLocation="springframework.org/sch
springframework.org/sch
code.alibabatech.com/sc
code.alibabatech.com/sc">

<!--配置应用名称-->
<dubbo:application name="product-service-provider"/>

<!--配置注册中心的地址-->
<dubbo:registry address="zookeeper://10.31.163.100:2181"/>

<!--配置当前服务在dubbo中的协议端口-->
<dubbo:protocol port="20880"/>

<!--配置接口-->
<dubbo:service interface="com.qf.service.product.api.IProductService" ref="productService"/>

<!--配置接口的实现类-->
<bean id="productService" class="com.qf.product.service.impl.ProductServiceImpl"/>



</beans>


2)编写单元测试,引入配置文件,并启动dubbo

注意:前提是要启动zk注册中心

public class TestServiceProvider {

  

    @Test

    public void testService() throws IOException {

        

        ClassPathXmlApplicationContext context  =

                new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});

        //将服务提交给dubbo的container,然后注册到注册中心上

        context.start();

        System.out.println("商品服务开始提供服务");

        System.out.println("按任意键停止");

        //让服务在收到任意输入内容之前不会结束

        System.in.read();

  

    }

}


当看到这个结果,就表示服务发布成功




5.创建服务消费者项目

1)引入依赖

<!--引入dubbo的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.8</version>
</dependency>
<!-- zookeeper客户端依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

<dependency>
<groupId>com.qf</groupId>
<artifactId>my-dubbo-product-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>



2)编写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="springframework.org/sch"
xmlns:xsi="w3.org/2001/XMLSchema-i"
xmlns:dubbo="code.alibabatech.com/sc"
xsi:schemaLocation="springframework.org/sch
springframework.org/sch
code.alibabatech.com/sc
code.alibabatech.com/sc">

<!--配置消费者应用的名字-->
<dubbo:application name="product-consumer"/>

<!--配置注册中心的地址-->
<dubbo:registry address="zookeeper://10.31.163.100:2181"/>

<!--配置要使用的接口所在的路径-->
<dubbo:reference interface="com.qf.service.product.api.IProductService" id="productService"/>




</beans>


3)在单元测试中去调用service

@Test
public void testInvoke(){

ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[]{"classpath:consumer.xml"});

IProductService productService = (IProductService) context.getBean("productService");

String s = productService.showProd();
System.out.println(s);


}



小结:





三、在Springboot项目中使用dubbo

1.方式一: 基于XML的整合方式

1)创建springboot的服务提供者项目

(1)引入依赖

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

(2)将xml配置文件放进resources中

(3)在springboot的入口类上打上注解:@ImportResource("classpath:provider.xml")


2)创建springboot的服务消费者项目

(1)引入依赖

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

(2)将xml配置文件放进resources中

(3)在springboot的入口类上打上注解:@ImportResource("classpath:consumer.xml")

(4)使用autowired将接口的实现类的对象自动注入进来,相当于是通过dubbo(zk)来提供服务的提供者的类。

@SpringBootTest
class MySpringBootProductConsumerApplicationTests {

@Autowired
private IProductService productService;


@Test
void contextLoads() {

System.out.println(productService.showProduct());


}

}




2.方式二:基于注解的整合方式


1)创建服务提供者项目

(1)引入依赖

(2)编写application.yml文件,加入以下配置(本来在xml中的配置将写在yml中)

server:
port: 8081
dubbo:
application:
name: product-service-provider
registry:
address: zookeeper://10.31.163.100:2181
protocol:
port: 20884



(3)编写服务提供者类并实现接口,并在接口上打上注解:

@Component

@Service <==import com.alibaba.dubbo.config.annotation.Service;

(4)在入口类上打上注解

@EnableDubbo


2)创建服务消费者项目

(1)引入依赖

(2)编写application.yml文件,加入以下配置(本来在xml中的配置将写在yml中)

server:
port: 8082
dubbo:
application:
name: product-consumer
registry:
address: zookeeper://10.31.163.100:2181



(3)在需要用到服务提供者类的时候,使用@Reference注解

来自于com.alibaba.dubbo.config.annotation.Reference;

@SpringBootTest
class MySpringBootAnnotationProductConsumerApplicationTests {

@Reference
private IProductService productService;


@Test
void contextLoads() {

System.out.println(productService.showProduct());

}

}



(4)在入口类上打上注解

@EnableDubbo

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Spring Boot
创建时间:2020-06-22 17:22:00
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • duanhao
    栈主

小栈成员

查看更多
  • ?
  • zander
  • 凉茶cooltea
戳我,来吐槽~