快速入门
注意需要自己启动Etcd作为注册中心,暂时未实现其他注册中心
项目创建
首先创建三个模块,分别是
- common模块:提供consumer和provider之间需要使用的接口
- consumer:消费者
- provider:提供者
导入依赖
需要让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();
}
}
测试结果: