Dubbo是什么?
具体点击:https://blog.csdn.net/houshaolin/article/details/76408399
例子:
首先先安装Zookeeper
在Zookeeper官网中下载Zookeeper发行包并解压:
复制Zookeeper配置文件
将Zookeeper安装目录的conf子文件夹中的zoo_sample.cfg复制一份并重命名为zoo.cfg
运行Zookeeper
执行Zookeeper安装(解压)目录中bin子文件夹的zkServer.cmd启动Zookeeper
打开后,这个cmd窗口不要关闭,。。。
代码块
首先创建springBoot项目
使用eclipse创建war项目,pom.xml可能出现说
web.xml is missing and 'failOnMissingWebXml' is set to true
解决方案
有两种:
第一种当然是创建一个web.xml了。
但是更推荐第二种,因为第一种会在项目里有一个无用文件。
第二种是告诉maven,我真的不需要web.xml了
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
然后Maven>Update project这样就可以了,其中的version不是必需的。
服务端(提供者)
创建一个名为demo_provider的SpringBoot项目
需要引入的依赖
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
application.properties 配置:
#为了防止Tomcat端口冲突
server.port=8081
#提供者名字,任意取名
spring.dubbo.application.name=ppp-provider
#2181默认的zookeeper入口
spring.dubbo.registry.address=zookeeper://172.17.1.30:2181
spring.dubbo.protocol.name=dubbo
#提供者提供的端口,任意取
spring.dubbo.protocol.port=9999
#提供者提供的接口
spring.dubbo.scan=com.example.service
提供接口的实现类
@Service
public class StudentServiceImpl implements IStudentService {
@Override
public List<Student> getList() {
List<Student> list = new ArrayList<Student>();
list.add(new Student(1,"张三",11));
list.add(new Student(2,"李四",22));
list.add(new Student(3,"王五",33));
return list;
}
@Override
public Student getStudentById(Integer id) {
return null;
}
然后在SpringBoot启动入口启动程序,出现红色框里的内容证明服务端启动成功:
客户端(消费者)
创建一个名为demo_consumer的SpringBoot项目
需要引入的依赖
<!-- 分布式相关依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
<!-- 排除不需要的相关jar包 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
在这里需要创建一个跟提供者路径相同、类名相同、方法名和返回值相同的接口,有涉及到提供者实体类的话,消费者必须也创建一个跟提供者实体类路径和对象一样的实体类。
然后消费者application.properties
server.port=8082
spring.dubbo.application.name=c-consumer
spring.dubbo.registry.address=zookeeper://172.17.1.30:2181
spring.dubbo.scan=com.example.service
使用@Reference注解注入远程服务,使自己的服务层使用远程服务对象调用所需要的方法
package com.qhr.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.example.entity.Student;
import com.example.service.IStudentService;
@Service
public class StudentServiceImpl {
//注入分布式的远程服务的对象
@Reference
IStudentService service;
public List<Student> list(){
return service.getList();
}
}
控制层按平常调用自己的service层返回数据到页面
package com.qhr.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.entity.Student;
import com.qhr.service.StudentServiceImpl;
@RestController
public class StudentController {
@Autowired
StudentServiceImpl service;
@RequestMapping("/studentList")
public List<Student> list(){
return service.list();
}
}
消费者启动入口:
package com.qhr;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
//把远程服务给扫描进来
@DubboComponentScan(basePackages="com.example.service")
@SpringBootApplication
//SpringMVC注解,直接返回给页面一个json数据
@RestController
public class DemoConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DemoConsumerApplication.class, args);
}
@RequestMapping("/")
public String index(){
return "客户端大爷你好。。。";
}
}
浏览器访问消费者URL
出现了远程服务实现类的数据证明消费者已经调用远程服务成功!
进入一个dubbo提供的war文件web程序可以看到我们创建提供者和消费者
资源war文件:https://pan.baidu.com/s/1OvgfUbYICUvBufggyQgzRg 提取码:z2c3
下载完放在Tomcat的webapps路径下即可,然后进入bin目录打开startup.bat文件启动Tomcat服务
启动完后Tomcat将多出一个dubboadmin文件
复制文件名通过访问localhost:8080/dubboadmin
访问时登录用户名:root 密码:root
确认身份后将进入此页面,然后点击进去即可看到编写提供者和消费者
SpringBoot和Dubbo-zookeeper(基于注解)微服务框架简单例子就简单做完了 。。。。