2Ribbon服务提供者 · SpringCloud微服务实战 · 看云
导航
本节代码地址
本节将通过一个简单的程序展示Ribbon API 的使用,本节的程序结构图如下:
先建服务端fw-cloud-ribbon-server提供一个RESTFUL的接口,然后在创建Ribbon客户端调动,并将负载的效果显示出来。接下来开始
1. ribbon服务端模块
新建模块fw-cloud-ribbon-server
1.1 maven 包引入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
spring-boot-starter-actuator包不清楚的可以看下,前面章节“Eureka服务端健康检查”,使用spring-cloud-starter-netflix-eureka-client是想通过用Eureka的注册中心发现注册的服务列表。
1.2 新建启动类
@EnableDiscoveryClient
@SpringBootApplication
public class FwRibbonServerApplication {
public static void main(String[] args) {
SpringApplication.run(FwRibbonServerApplication.class, args);
}
}
1.3 添加配置
server:
port: 8773
spring:
application:
name: fw-cloud-ribbon-server
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
这里为了更好的演示RESTFUL接口,我创建了一个User类
1.4 新建实体
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private long id;
private String username;
private String realname;
private String email;
private String remark;
}
1.5 新建Service 接口
public interface UserService {
List<User> getUsers();
User getUserById(long id);
}
1.6 新建 UserServiceImpl 实现类
这里我模拟了数据库构造数据,同时使用了java8 新特性lambda表达式查询用户信息,想要熟悉更多的java8 特性,可以看一本“Java 8 实战”的书。
@Service
public class UserServiceImpl implements UserService {
@Override
public List<User> getUsers() {
return initUser();
}
@Override
public User getUserById(long id) {
List<User> userList = getUsers().stream().filter(user -> user.getId() == id).collect(Collectors.toList());
if(CollectionUtils.isEmpty(userList)){
return new User(0,null,null,null,"这位顾客先拿一下腰牌!");
}
return userList.get(0);
}
private List<User> initUser(){
List<User> userList =new ArrayList<>();
User user1=new User(1,"113445","刘备","liubei@gmail.com","汉室刘皇叔,蜀国大佬");
User user2=new User(2,"123456","关羽","guanyu@gmail.com","人称关二爷,蜀国五虎上将");
User user3=new User(3,"147258","张飞","zhangfei@gmail.com","此人性格暴躁,蜀国五虎上将");
userList.add(user1);
userList.add(user2);
userList.add(user3);
return userList;
}
}
1.7 接下来编写RESTFUL 接口
这里我们增加了一个log日志,我们将当前提供服务的是url地址打印出来,这样方便我们看到演示效果。
@RestController
@RequestMapping("user")
public class RibbonController {
@Autowired
private UserService userService;
@GetMapping("/{id:\\d+}")
public User getUserById(@PathVariable Long id, HttpServletRequest req){
String url = req.getRequestURL().toString();
User user = userService.getUserById(id);
user.setRemark(user.getRemark()+":提供服务的是:"+url);
return user;
}
}
接下来我们需要启动项目验证RESTFUL 接口
1.8 启动项目
启动之前记得先启动Eureka服务端
通过postman 验证没问题
下面我们启动8774 端口的服务,跟之前一样,我们需要修改一下配置,允许并行启动
然后修改端口为8774之后再启动
server:
port: 8774
全部启动成功
2.总结
本节我们了解了Ribbon 的请求结构及服务端的搭建,下面我们再创建Ribbon客户端,看看Ribbon 客户端如何跟服务端发生亲密的接触。




