Skip to main content

快速入门


快速入门

注意需要自己启动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