1. 程式人生 > >SpringCloud框架服務提供者

SpringCloud框架服務提供者

首先說明一下,為了便於講解,本節之後,如無特殊說明,均是以單點的Eureka進
行講解的。

服務提供者和服務消費者
在這裡插入圖片描述

服務提供者程式碼示例
這是一個稍微有點複雜的程式。我們使用spring-data-jpa操作h2資料庫,同時將該
服務註冊到註冊中心Eureka中。

  • 建立一個Maven工程,並在pom.xml中新增如下內容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht
tp://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://m aven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <artifactId>microservice-provider-user</artifactId> <packaging>jar</packaging> <parent> <groupId>com.itmuch.cloud</groupId>
<artifactId>spring-cloud-microservice-study</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <!-- 新增Eureka的依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</
artifactId
>
</dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
  • 配置檔案:application.yml
server:
	port: 8000
spring:
	application:
		name: microservice-provider-user # 專案名稱儘量用小寫
jpa:
	generate-ddl: false
	show-sql: true
	hibernate:
		ddl-auto: none
	datasource: # 指定資料來源
		platform: h2 # 指定資料來源型別
		schema: classpath:schema.sql # 指定h2資料庫的建表指令碼
		data: classpath:data.sql # 指定h2資料庫的insert指令碼
logging:
	level:
		root: INFO
		org.hibernate: INFO
		org.hibernate.type.descriptor.sql.BasicBinder: TRACE
		org.hibernate.type.descriptor.sql.BasicExtractor: TRACE
		com.itmuch.youran.persistence: ERROR
eureka:
	client:
		serviceUrl:
			defaultZone: http://discovery:8761/eureka/ # 指定註冊中心的地址
instance:
	preferIpAddress: true
  • 建表語句:schema.sql
drop table user if exists;
create table user (
	id bigint generated by default as identity, 
	username varchar(255), 
	age int, 
	primary key (id));
  • 插庫語句:data.sql
insert into user (id, username, age) values (1,'Tom',12);
insert into user (id, username, age) values (2,'Jerry', 23);
insert into user (id, username, age) values (3,'Reno', 44);
insert into user (id, username, age) values (4,'Josh', 55);
  • DAO:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

-Controller:

/**
* 作用:
* ① 測試服務例項的相關內容
* ② 為後來的服務做提供
* @author eacdy
*/
@RestController
public class UserController {
	@Autowired
	private DiscoveryClient discoveryClient;
	@Autowired
	private UserRepository userRepository;
	/**
	* 注:@GetMapping("/{id}")是spring 4.3的新註解等價於:
	* @RequestMapping(value = "/id", method = RequestMethod.GET)
	* 類似的註解還有@PostMapping等等
	* @param id
	* @return user資訊
	*/
	@GetMapping("/{id}")
	public User findById(@PathVariable Long id) {
		User findOne = this.userRepository.findOne(id);
		return findOne;
	}
	/**
	* 本地服務例項的資訊
	* @return
	*/
	@GetMapping("/instance-info")
	public ServiceInstance showInfo() {
		ServiceInstance localServiceInstance = this.discoveryClient.
		getLocalServiceInstance();
		return localServiceInstance;
	}
}
  • 實體類:
@Entity
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	@Column
	private String username;
	@Column
	private Integer age;
	...
	// getters and setters
}
  • 編寫Spring Boot啟動程式,通過@EnableDiscoveryClient註解,即可將
    microservice-provider-user服務註冊到Eureka上面去
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) {
	SpringApplication.run(UserApplication.class, args);
	}
}

測試
我們依次啟動Eureka服務和microservice-provider-user服務。
訪問:http://localhost:8761,如下圖。我們會發現microservice-provider-user服務
已經被註冊到了Eureka上面了。
在這裡插入圖片描述
訪問:http://localhost:8000/instance-info,返回結果:

{
	"host": "192.168.0.59",
	"port": 8000,
	"metadata": {},
	"uri": "http://192.168.0.59:8000",
	"secure": false,
	"serviceId": "microservice-provider-user"
}

訪問:http://discovery:8000/1,返回結果:

{
	"id": 1,
	"username": "Tom",
	"age": 12
}

服務註冊到高可用Eureka

如果 Eureka 是高可用的,那麼各個微服務配置只需要將 defaultZone 改為如
下即可:

eureka:
	client:
	  serviceUrl:
		defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka