跳到主要内容

快速入门

注意需要自己启动Etcd作为注册中心,暂时未实现其他注册中心

项目创建

首先创建三个模块,分别是

  • common模块:提供consumer和provider之间需要使用的接口
  • consumer:消费者
  • provider:提供者

image-20240504125023077

导入依赖

需要让consumer和provider都导入如下依赖,也就是我们的RPC框架依赖yunfei-rpc-spring-boot-starter

<dependencies>
<dependency>
<groupId>com.yunfeirpc</groupId>
<artifactId>yunfei-rpc-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yunfei</groupId>
<artifactId>example-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

接口与实现代码

common模块

在common模块我们定义了一个getUser的接口

public interface UserService {
/**
* 获取用户
*
* @param user
* @return
*/
User getUser(User user);
}

Provider模块

在Provider模块我们实现了这个接口的功能,也就是这个接口最后是需要提供服务的

@Slf4j
@Service
@YunRpcService
public class UserServiceImpl implements UserService {
@Override
public User getUser(User user) {
System.out.println("provider received: " + user);
return user;
}
}

Consumer模块

在Consumer模块,我们写了一个类,这个类中的某些功能需要使用到远程调用的功能

@Service
public class ExampleServiceImpl {
@YunRpcReference
private UserService userService;

public void test() {
User user = new User();
user.setName("yunfei");
User resultUser = userService.getUser(user);
System.out.println("consumer get User:" + resultUser.getName());
}
}

注解添加

@YunRpcService

在服务提供者(Provider)的类上加YunRpcService

@Slf4j
@Service
@YunRpcService
public class UserServiceImpl implements UserService {
@Override
public User getUser(User user) {
System.out.println("provider received: " + user);
return user;
}
}

@YunRpcReference

在消费者模块(Consumer)要使用的 服务上加YunRpcReference

@Service
public class ExampleServiceImpl {
@YunRpcReference
private UserService userService;

public void test() {
User user = new User();
user.setName("yunfei");
User resultUser = userService.getUser(user);
System.out.println("consumer get User:" + resultUser.getName());
}
}

@EnableYunRpc

在服务提供者上加EnableYunRpc注解

@SpringBootApplication
@EnableYunRpc
public class ExampleSpringbootProviderApplication {

public static void main(String[] args) {
SpringApplication.run(ExampleSpringbootProviderApplication.class, args);
}

}

在服务消费者上加EnableYunRpc(needServer = false)注解,这里是不需要启动服务器。

@SpringBootApplication
@EnableYunRpc(needServer = false)
public class ExampleSpringbootConsumerApplication {

public static void main(String[] args) {
SpringApplication.run(ExampleSpringbootConsumerApplication.class, args);
}

}

测试

@SpringBootTest
class ExampleServiceImplTest {

@Resource
private ExampleServiceImpl exampleService;

@Test
void test() {
exampleService.test();
}

}

测试结果:

image-20240504131011960