IDEA创建一个空项目;
1、创建一个服务提供者 provider-server
选择File->New->Module
选择Spring Initializr或者Maven
输入项目名称等等
勾选spring web模块
最后Finish
创建一个卖票的服务 TicketService
package com.kuang.service;
public interface TicketService {
public String getTicket();
}
创建一个实现类 TicketServiceImpl
package com.kuang.service;
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "《爺说Java》";
}
}
2、创建要给客户端 consumer-server
选择File->New->Module
输入项目名称
勾选spring web模块
最后Finish
创建一个用户服务 UserService
A.在服务提供者provider-server的Pom导入依赖
AA:dubbo依赖
访问maven官网 搜索dubbo对应的依赖 https://mvnrepository.com/
选择版本,一般选择最新的
复制依赖
粘贴到pom.xml中
AB:导入zkClient 依赖
maven官网 搜索zkClient ,选择标注github的依赖
复制依赖
粘贴到pom.xml中
继续导入其他依赖,这个时候就碰到了冲突bug,依赖冲突,可以选择排除,可以选择注释
<dependencies>
<!--1\导入依赖:Dubbo + zookeeper -->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!--2\zkClient-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>-->
<!--导入zookeeper依赖后,带来的问题:可能会和springboot日志会冲突-->
<!--3\引入zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 4\https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 5\https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j13</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
在到服务provider-server提供者配置参数,可以参考
D:\dubbo-admin\dubbo-admin\src\main\resources\application.properties配置文件
server.port=8001
# 服务应用名字
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务要被注册 扫描哪些目录下的包 这时候对应被扫描的包内得加上注解
dubbo.scan.base-packages=com.kuang.service
重点内容:
新版的使用@DubboService来注解
package com.kuang.service;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
//zookeeper:服务注册与发现
@DubboService //新版的使用@DubboService来注解 可以被扫描到,在项目一启动就自动注册到注册中心去(zookeeper)
@Component //首先得放在容器当中 这里使用了Dubbo后尽量不用service注解
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "《爺说Java》";
}
}
启动测试
1、首先在apache-zookeeper-3.5.9-bin\apache-zookeeper-3.5.9-bin\bin目录下启动服务zkServer.cmd
2、启动测试程序
3、启动监控页面看看是否服务正常
dubbo-admin\dubbo-admin\target\dubbo-admin-0.0.1-SNAPSHOT.jar
访问监控页面 http://localhost:7001/ 登陆root-root
查看服务
查看提供者
点击查看提供者详情
B.在消费者consumer-server的Pom导入依赖
BA:导入依赖,内容跟提供者的依赖一样
重点依赖
<!--1\导入依赖:Dubbo + zookeeper -->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!--2\zkClient-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>-->
<!--导入zookeeper依赖后,带来的问题:可能会和springboot日志会冲突-->
<!--3\引入zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 4\https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 5\https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j13</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
在consumer-server消费者配置参数
server.port=8002
# 消费者去哪里拿服务=需要暴露自己的名字
dubbo.application.name=consumer-server
# 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
重点内容:图片红色字最后一句写错了,是一模一样的interface接口
同时,@Service也是重点
package com.kuang.service;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
@Service //放到容器中,重点:这里使用的是spring的Service 这样才能@Autowired
public class UserService {
//想拿到provider-server提供的票,要去注册中心拿到服务
@DubboReference //新版的@DubboReference 老版本的Reference 远程引用
// 如何引用:1、Pom坐标 2、定义路径相同的接口名
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println("消费者在注册中心拿到一张票=>"+ticket);
}
}
package com.kuang.service;
public interface TicketService {
public String getTicket();
}
启动消费者测试
package com.kuang;
import com.kuang.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.buyTicket();
}
}
总结步骤:
开启了zookeeper服务
1.提供者提供服务
1.导入依赖(pom.xml)
2.配置注册中心的地址,以及服务发现名,和要扫描的包(application.properties)
3.在想要被注册的服务上面~增加一个注解@DubboService (TicketServiceImpl)
2.消费者如何消费
1.导入依赖(pom.xml)
2.配置注册中心的地址,配置自己的名字~(application.properties)
3.从远程引用服务@DubboReference @Service【重点】,
(其中定义路径相同的接口名这里的消费者TicketService拿票路径和服务提供票的路径必须得一样=com.kuang.service.TicketService)(UserService)