一个微服务由 服务提供者-注册中心-服务消费者 组成
现在来创建一个服务提供者,并且提价例子来测试(该例子只是测试提供者功能,并没有与注册中心挂钩)
第一步:从上一步创建的父工程里 创建一个新的module
创建module ,并且取名为eurekaclient
在新建的eurekaclient 工程的pom.xml中添加提供者依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
</dependencies>
第二步:创建yml文件,添加提供者配置信息
在eurekaclient的resource文件夹中创建application.yml文件,并添加以下信息:
server:
port: 8010
spring:
application:
name: provider
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
配置信息说明:
- server-port: 服务提供者的端口号
- spring-application-name: 当前服务注册在Eureka Server的名称
- eureka-client-service-url-defaultZone: 注册中心的地址
- eureka-instance-prefer-ip-address: 是否将当前服务的ip注册到Eureka Server中
第三步,配置启动类,启动服务提供者
在eurekaclient 的java 文件夹中,创建一个名字以Application 结尾的java 类,添加如下信息:
package com.southwind;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//声明该类是springboot服务的入口
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args){
SpringApplication.run(ProviderApplication.class);
}
}
最后,先启动注册中心eurekaserver ,然后再启动eurekaclient ,在网页上输入 http://localhost:8761
即可看到服务提供者已经注册进了注册中心
至此,服务提供者已经实现。
下面为提供者提价一下增删改查的功能:
这里已经为idea 增加了lombok 插件以及依赖,为的是实体类可以省略掉getter/setter 方法
添加的lombok依赖放在了父工程的pom.xml文件里,方便其他子工程使用
依赖如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
然后在eruekaclient工程建好如下目录的文件:
实体类信息添加如下:
Student:
package com.southwind.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class Student {
private long id;
private String name;
private int age;
}
StudentRepository:
package com.southwind.repository;
import com.southwind.entity.Student;
import java.util.Collection;
public interface StudentRepository {
public Collection<Student> findAll();
public Student findById(long id);
public void saveOrUpdate(Student student);
public void deleteById(long id);
}
简化增删改查操作,所以不连接数据库,使用Map集合作为存取的介质
StudentRepositoryimpl:
package com.southwind.repository.impl;
import com.southwind.entity.Student;
import com.southwind.repository.StudentRepository;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class StudentRepositoryimpl implements StudentRepository {
private static Map<Long,Student> studentMap;
static{
studentMap = new HashMap<>();
studentMap.put(1L,new Student(1L,"张三",22));
studentMap.put(2L,new Student(2L,"李四",23));
studentMap.put(3L,new Student(3L,"王五",24));
}
@Override
public Collection<Student> findAll() {
return studentMap.values();
}
@Override
public Student findById(long id) {
return studentMap.get(id);
}
@Override
public void saveOrUpdate(Student student) {
studentMap.put(student.getId(),student);
}
@Override
public void deleteById(long id) {
studentMap.remove(id);
}
}
这里使用REST ful 风格实现增删改查
StudentHandler:
package com.southwind.controller;
import com.southwind.entity.Student;
import com.southwind.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Collection;
@RestController
@RequestMapping("/student")
public class StudentHandler {
@Autowired
private StudentRepository studentRepository;
@GetMapping("/findAll")
public Collection<Student> findAll(){
return studentRepository.findAll();
}
@GetMapping("/findById/{id}")
public Student findById(@PathVariable("id") long id){
return studentRepository.findById(id);
}
@PostMapping("/save")
public void save(@RequestBody Student student){
studentRepository.saveOrUpdate(student);
}
@PutMapping("/update")
public void update(@RequestBody Student student){
studentRepository.saveOrUpdate(student);
}
@DeleteMapping("/deleteById/{id}")
public void deleteById(@PathVariable("id") long id){
studentRepository.deleteById(id);
}
}
完成,直接启动 eruekaclient 工程,在postman 测试:
查询:
添加:
修改:
删除:
全部测试成功,服务提供者增删改查功能完成. 目前还未用到注册中心,后续会继续更新 服务消费者通过注册中心调用服务提供者的过程