接着上一篇项目架构的布局,下面我们一起来实践下dubbo服务端及客户端的简单设置,以及在dubbo admin中查看服务的注册及消费情况
1 dubbo环境搭建
dubbo环境的搭建可参考文章环境搭建:https://blog.csdn.net/qq_41820981/article/details/88537399 包括基于docker的zookeeper安装及dubbo admin的安装。
2 dubbo服务提供方配置
2.1 创建xml配置文件
不能直接在spring boot默认的配置文件application.properties中配置dubbo的属性,因为spring boot官方没有dubbo对应的starter,所以spring boot不能解析dubbo的属性。有网友编写了spring-boot-starter-dubbo,让我们可以使用spring boot的方式方便地开发dubbo程序,有需要的同学可以去了解一些。
本文实践的目的,是为了学习dubbo在spring boot中的配置,不是更方便地开发,所以我们这里还是选用原始的xml配置文件的方式来进行dubbo的配置,然后使用@ImportResource注解来加载xml配置。
下面是服务提供方的配置文件provider.xml。
有两种方式可以暴露dubbo服务,一是通过注解方式,二是通过xml配置方式,区别就在最后几行配置上。
使用注解方式,在类上打@service注解,就必须要用dubbo:annotation指定启动扫描路径。下面的provider.xml使用就是这种方式。
使用xml配置方式用dubbo:service申明要暴露的单个接口,就不需要再指定dubbo:annotation了。
provider.xml配制
**2.2 创建测试接口及测试类** 服务提供方提供一个checkItemStatus方法,用来检查一个商品是否可售。 接口定义类 ItemService.java
package com.example.demo.service;
public interface ItemService {
//检查商品是否可售
boolean checkItemStatus(String id);
}
接口实现类 ItemServiceImpl.java
package com.example.demo.service;
import com.alibaba.dubbo.config.annotation.Service;
//@Service //该Service注解是dubbo的注解,不是spring的。若使用xml配置方式暴露接口,则不需要该注解。
public class ItemServiceImpl implements ItemService {
@Override
public boolean checkItemStatus(String id) {
if (id.contains("111")) {
return true;
} else {
return false;
}
}
}
2.3 编写启动类
启动类 SpringbootDubboServerApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource(“classpath:provider.xml”) //加载xml文件
public class SpringbootDubboServerApplication {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(SpringbootDubboServerApplication.class, args);
Thread.sleep(Long.MAX_VALUE); //pom中没有加spring-boot-starter-web依赖,启动时没有tomcat容器,会自动退出,所以加了一个sleep防止自动退出
}
}
3 dubbo服务消费方配置
3.1 创建xml配置文件
创建远程服务代理和暴露dubbo服务一样,也有两种方式,一是使用注解方式,二是使用xml配置方式。下面的consumer.xml中使用的是第一种方式。如果使用xml配置方式创建远程服务代理,将dubbo:annotation一行替换成如下配置即可。
consumer.xml配制
**3.2 创建测试类** ItemController.java
package com.example.demo.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.example.demo.service.ItemService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ItemController {
//注入服务提供方暴露的接口,通过@Reference注解,dubbo会在扫描的时候自动代理接口,然后通过rpc调用远程服务。
//如果用xml配置方式,需要将@Reference换成@Autowired。
@Reference
// @Autowired
ItemService itemService;
@RequestMapping("/canbuy")
public String canBuy(@RequestParam("id") String id){
System.out.println(id);
boolean flag = itemService.checkItemStatus(id);
if (flag) {
return "can buy!";
} else {
return "can not buy!";
}
}
}
3.3 编写启动类
SpringbootDubboClientApplication.java
package com.example.demo.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource(“classpath:consumer.xml”) //加载xml配置文件
public class SpringbootDubboClientApplication {
public static void main(String[] args) throws Exception{
SpringApplication.run(SpringbootDubboClientApplication.class, args);
}
}
debug启动
4 测试
我们先后运行SpringbootDubboServerApplication.java和SpringbootDubboClientApplication.java,启动dubbo服务提供方和调用方。
在浏览器中输入dubbo admin的安装地址,如127.0.0.1:8089,打开dubbo admin界面,在服务治理-服务界面,可以看到我们注册的dubbo服务。状态“正常”,表示提供者和消费者都有。如果有乙方没有,在状态栏都会显示出来。
温馨提示:最后如何有访问不到的情况,原因是8080端口占用,请把tomcat端口号修改为8081!谢谢(查看https://blog.csdn.net/qq_41820981/article/details/88537399 )