开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):Dubbo 服务提供方】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12402
Dubbo 服务提供方
内容介绍:
一、添加依赖
二、配置文件
三、启动类
四、服务实现
五、总结
上节内容开发完了 RPC 服务接口,本节开始开发服务的提供者。开发服务的提供者也是基于 SpringBoot 整合 Dubbo,第一步添加相关的依赖,第二步时编写配置文件,第三步编写启动类,第四步实现服务的业务。
一、添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
继承SpringBoot的父工程。
<dependencies>
<!--dubbo-->
<dependency>
<groupId>pm.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--spring-boot-stater-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<artifactId>1og4j-to-slf4j</artifactId>
<groupId>org.apache. logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--zookeeper-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<exclusions>
<exclusion>
<groupId>org.s1f4j</groupId>
<artifactId>s1f4j-1og4j12</artifactId>
</exclusion>
<exclusion>
<groupId>1og4j</groupId>
<artifactId>1og4j</artifactId>
</exclusion>
</exclusions>
</ dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
<exclusions>
<exclusion>
<artifactId>s1f4j-1og4j12</artifactId>
<groupId>org.s1f4j</groupId>
</exclusion>
</exclusions>
</ dependency>
<!--API-->
<dependency>
<groupId>com.itheima. demo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.O-SNAPSHOT</version>
</dependency>
</dependencies>
依赖主要包含了三个部分。第一部分时 dubbo 相关的依赖,第二部分时 spring-boot 自身的依赖。第三部分就是zookeeper,因为服务的提供者要将服务信息、服务的地址要注册到 zookeeper 当中,所以要加入 zookeeper 相关的依赖。第四部分是刚才所加的接口项目的依赖。
在其中对一些依赖做了处理,对一个依赖进行排除,因为拿来此处依赖会有一些日志的冲突。
二、配置文件
配置文件主要配置了哪些方面的信息?
#application.properties
spring.app1ication.name=dubbo-demo-provider
spring.dubbo.application.id=dubbo-demo-provider
spring.dubbo.application.name=dubbo-demo-provider
spring.dubbo.registry.address=zookeeper://
192.168.25.140:2181;zookeeper://
192.168.25.140:2182;zookeeper://192.168.25.140:2183
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
当前的服务提供者将自己的信息注册到 zookeeper 当中,服务的名称,英文的名字需要去指定;服务的 ID 需要指定;dubbo 中的名字需要指定。spring.dubbo.registry.address 注册中心的地址以集群的方式搭建,集群中有三个节点。
Zookeeper 的配置使用 zookeeper 协议,写上集群中的节点。现在的项目是服务的提供者,所以需要编写spring.dubbo.server=true。
protocol.name 和 protocol.port 是两个端口号。
代表当前服务的协议使用 dubbo。20880端口号是网络服务调用的时候使用的端口号。即将服务在20880端口上启动起来
三、启动类
创建新的java文件:
com.itheima.shop.springboot.dubbo.ProviderApplication.java
import
org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProviderApplication {
public static void main(string[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
在前面加@EnableDubboConfiguration 注解,并进行导包。
四、服务实现
新建 java 文件:service.impl.UserServiceImpl.java 实现接口
@Component
@Service(interfaceclass = IUserservice.class)
public class UserServiceImpl implements IUserservice
{
@Override
public string sayHello(string name) {
return "hello: "+name;
}
}
访问接口时传输一个名字,响应一个 hello+“名字”。服务的提供方类首先应该注册到 spring 容器中,所以要添加@Service 注解,注意该注解是spring的。
这个接口实现类实现了 IUserService 的接口,作为服务提供方存在。所以要关联上该服务和接口。
不仅仅是简单实现,还需要进行标识。要标识当前的服务是一个 dubbo 的一个 service。为了区分开来,我们可以把上面的@Service用@Component 替换防止歧义。
@Service 和@Component 注解的作用相同。下面配置一个 dubbo 的 Service 的注解,标识当前是针对哪一个接口提供的服务,需要一个 Class。
运行截图:
五、总结
总体来讲做了四件事情。第一件事添加依赖,第二件是配置文件。
在配置文件里需要注意:zookeeper 集群的地址,集群当中有三个节点。
每一个节点用分号隔开;对于服务提供方来讲要配置 dubbo.server=true;还要配置协议,名字和端口。
第三步就是编写启动类,和以前本质上相同,但多了@EnableDubboConfiguration 注解。
第四步是针对接口进行实现,提供了真正的服务。业务方法重要的是上面的配置。
第一个@Component 配置成一个 springbin,第二个配置了 dubboservice。