目录
项目结构与步骤梳理
完整项目结构如下
步骤梳理
1.开启zk服务
2.提供者提供服务
- 导入依赖
- 配置注册中心地址,服务发现名,扫描的包
- 在想要被注册的服务上增加@Service注解(dubbo包的service注解)
3.消费者对服务进行消费
- 导入依赖
- 配置注册中心的地址,配置自己的服务名
- 从远程注入服务@Reference(dubbo包的Reference注解)
provider-server
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--解决引入zk后日志冲突的问题-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
新建service接口和实现类,@Service注解来自于Dubbo包
提供者的配置文件
提供者的核心逻辑就是一个普通的方法+把它注册到zk上去
consumer-server
导入依赖
所有依赖和提供者的一样,需注意zk的依赖包得能和你的zk服务版本匹配或兼容~
消费者调用生产者的业务
配置我们后面说,单说调用的方式有两种,一种如图,你把生产者搞成一个包,当做依赖写到消费者的pom文件中
这种方式在项目中经常用到。
<!--引入service的依赖-->
<dependency>
<groupId>xx.xxxxx.dubbo</groupId>
<artifactId>xxx-dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
另外一种方式就是你新建一个service接口,这个接口和提供者的接口一模一样。
然后消费者自己的实现类进行如下操作。首先,消费者的实现类一定要放在springboot的容器中,然后你通过@Reference注解远程调用提供者的TicketServiceImpl,注意采取这种方法,新建的service接口就是标记,如果没有新建的service接口,@Reference找不到提供者的TicketServiceImpl
接下来我们在配置文件中,把消费者的信息注册到zk上去
测试,在消费者的测试类中先拿到UserService,然后调用其中的方法
测试之前,你当然要先启动提供者,确保提供者已经注册到zk上了
这回可以启动消费者的测试类了,可以看到成功取出zk中的消息了~
消费者的核心逻辑是,先把自己放到注册中心上,然后通过注解取出提供者放在注册中心上的消息,然后在自己的业务中进行消费~