SpringCloud——服务的注册与发现(Eureka)
一,Rest环境搭建:服务提供者与服务消费者
Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务
1.搭建父工程
父工程打包方式改为pom,在父工程中进行依赖版本管理
pom.xml
<modules>
<module>springcloud-eureka-7001</module>
<module>springcloud-api</module>
<module>springcloud-provider-dept-8001</module>
<module>springcloud-consumer-dept-80</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<junit.version>4.13.2</junit.version>
<lombok.version>1.18.20</lombok.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<!--打包方式-->
<packaging>pom</packaging>
<!--依赖版本管理-->
<dependencyManagement>
<dependencies>
<!--SpringCloud的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
package com.yyx.springcloud.pojo;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true) //支持链式写法
public class Dept implements Serializable {
private Long deptno;
private String dname;
//数据所在数据库,微服务中一个服务对应一个数据库,同一个信息可能存在不同的数据库中
private String dbSource;
public Dept(String dname) {
this.dname = dname;
}
}
所需依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
server:
port: 8001
#mybatis的配置
mybatis:
type-aliases-package: com.yyx.springcloud.pojo
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
#spring的配置
spring:
application:
name: springcloud-provider-dept
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb4?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
#eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
instance:
instance-id: springcloud-provider-dept8001
#info配置
info:
app.name: springcloud-study
company.name: yangyongxin.top
实现三个简单的业务做测试
@Service
public class DeptServiceImpl implements DeptService{
@Autowired
private DeptDao deptDao;
@Override
public int addDept(Dept dept) {
return deptDao.addDept(dept);
}
@Override
public Dept queryById(Long id) {
return deptDao.queryById(id);
}
@Override
public List<Dept> queryAll() {
return deptDao.queryAll();
}
}
controller的restful接口对外提供服务
@RestController
public class DeptController {
@Autowired
private DeptService deptService;
@PostMapping("/dept")
public int addDept(@RequestBody Dept dept){
return deptService.addDept(dept);
}
@GetMapping("/dept/{id}")
public Dept queryById(@PathVariable("id") Long id){
return deptService.queryById(id);
}
@GetMapping("/dept")
public List<Dept> queryAll(){
return deptService.queryAll();
}
}
测试
4.服务消费者
将RestTemplete注入Spring容器中
@Configuration
public class ConfigBean {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
restTemplate提供多种便捷访问远程http服务的方法,简单的RestFul服务模板
@RestController
public class DeptConsumerController {
@Autowired
private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的RestFul服务模板
private static final String REST_URL_PREFIX="http://localhost:8001";
@RequestMapping("/consumer/dept/add")
public int add(Dept dept){
return restTemplate.postForObject(REST_URL_PREFIX+"/dept",dept,int.class);
}
@RequestMapping("/consumer/dept/get/{deptno}")
public Dept dept(@PathVariable("deptno") Long deptno){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/"+deptno,Dept.class);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> dept(){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept",List.class);
}
}
yml中定义端口为80
server:
port: 80
二,Eureka中注册服务
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
yml中配置eureka
server:
port: 7001
#eureka配置
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #表示是否向eureka注册中心注册自己
fetch-registry: false #fetch-registry为false,则表示自己为注册中心
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
将服务提供者注册进eureka
在服务提供者工程模块中加入eureka依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
在服务提供者工程模块中application.yml添加eureka配置
#eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
instance:
instance-id: springcloud-provider-dept8001
启动所有项目,访问eureka地址http://localhost:7001/
配置info
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
服务提供者模块中配置
#info配置
info:
app.name: springcloud-study
company.name: yangyongxin.top
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/4987.html