虽然说每个微服务并没有限制其技术栈,不过一般来说都是使用java进行开发。
既然使用java,那么就少不了IDEA这个IDE了。
使用IDEA去创建微服务比较简单:
1、新建一个模块
2、选择spring cloud(每个版本的IDEA可能会有不同)
3、按照自己实际需求填写好下面的信息(实际开发中,这些信息都比较重要)
4、按需选择合适的组件(图示选择创建eureka服务治理中心)
5、填写好模块名后创建微服务,完成
在创建好微服务后,pom文件可能要做一些修改,比方说我使用的idea自行创建完之后,spring-boot-starter-tomcat下带着一个scope,会影响最后启动,这里就要删掉这个scope。
我创建的一个Eureka微服务如下:
还有一个朴实无华的微服务
接下来稍微介绍product微服务的其他配置
1、ProductApplication,其中注解是关键,需要添加@SpringBootApplication注解
package com.example.product;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
2、application.yml/application-{spring.profiles.active}.yml的配置
在启动一个微服务的时候,SpringBoot会去读取资源文件的application.properties或者是application.yml的配置,现在都比较流行使用yaml,所以我也使用yaml。
application-{spring.profiles.active}.yml又是什么?
实际情况中,可能会根据不同情况执行不同的参数。比如说在公司开发的时候,会有开发环境、测试环境、类生产环境、生产环境,这些环境通常都是封闭互不影响的,所以对接的某些资源可能就发生变更,比如对接其他服务对应环境的url。
但是如果都写在application.yml中,那么每次切换环境就得去修改一次application.yml,实践告诉我们,这样多次人工修改就容易出问题。
在application.yml中,我们可以通过指定spring.profiles.active参数,去再读取一个application-{spring.profiles.active}.yml的参数,这样就能做到不修改application.yml同时区分环境了。
当然还有其他用途,这个在这里不深究。
以下是我的application.yml
spring:
# 定义spring应用名称,它是一个微服务名称,一个微服务可拥有多个实例
application:
name: product
profiles:
active: alpha
eureka:
client:
# 确定一个region
region: china
# 服务注册域地址
service-url:
# defaultZone: http://localhost:5001/eureka,http://localhost:5002/eureka
eastchina: http://localhost:5001/eureka
southchina: http://localhost:5002/eureka
# 是否检索服务实例清单,默认值true
fetch-registry: true
# 检索服务实例清单的时间间隔,默认30s
registry-fetch-interval-seconds: 30
# 当服务获取超时后,最大尝试次数,默认值为10
cache-refresh-executor-exponential-back-off-bound: 10
# 首次服务注册延迟时间,默认40s
initial-instance-info-replication-interval-seconds: 40
instance:
# 服务治理中心服务器ip
hostname: localhost
# 微服务实例超时失效秒数,默认90s,如果超时,eureka会将实例剔除
lease-expiration-duration-in-seconds: 90
# 间隔对应的秒数执行一次续约服务,默认30s
lease-renewal-interval-in-seconds: 30
还有我的application-alpha.yml
server:
port: 8001
eureka:
client:
# 确定一个zone
availability-zones:
china: southchina
当然也能够通过启动springboot时传参数,比如:
那么我在启动ProductApplication-beta的时候,就会传入参数beta覆盖我在application.yml中的alpha