这里只使用一个生产者和一个消费者的例子
1.创建总的项目
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>per.czt</groupId>
<artifactId>microservicedemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>consumer-order</module>
<module>provider-user</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.创建生产者项目和消费者项目
在总的项目下分别新建一个maven module,一个provider-user,另一个为consumer-order
provider-user的pom.xml
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>per.czt</groupId>
<artifactId>microservicedemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>per.czt</groupId>
<artifactId>provider-user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider-user</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
consumer-order的pom.xml
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>per.czt</groupId>
<artifactId>microservicedemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>per.czt</groupId>
<artifactId>consumer-order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consumer-order</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
创建完成后项目目录如下
provider-user项目
consumer-order的目录
总项目的目录
3.编写生产者代码,测试
在src/main/resources下新建application.properties配置文件
server.port=7900
spring.application.name=provider-user
新建一个User类
package org.provider.user.pojo;
public class User {
private Long id;
private java.util.Date date;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public java.util.Date getDate() {
return date;
}
public void setDate(java.util.Date date) {
this.date = date;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "User [id=" + id + ", date=" + date + "]";
}
public User(Long id) {
super();
this.id = id;
this.date=new java.util.Date();
}
}
编写UserController
package org.provider.user.controller;
import org.provider.user.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public User getUser(@PathVariable("id")Long id) {
return new User(id);
}
}
编写启动类
package org.provider.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Hello world!
*
*/
@SpringBootApplication
public class ProviderUser
{
public static void main( String[] args )
{
SpringApplication.run(ProviderUser.class, args);
}
}
启动该项目
4.编写消费者代码,测试
application.properties
server.port=8900
spring.application.name=consumer-order
user.url=http://127.0.0.1:7900/user/
同样新建一个User类
package org.consumer.order.pojo;
import java.util.Date;
public class User {
private Long id;
private java.util.Date date;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public java.util.Date getDate() {
return date;
}
public void setDate(java.util.Date date) {
this.date = date;
}
@Override
public String toString() {
return "User [id=" + id + ", date=" + date + "]";
}
public User(Long id) {
super();
this.id = id;
this.date=new Date();
}
public User() {
super();
// TODO Auto-generated constructor stub
}
}
编写OrderController
package org.consumer.order.controller;
import org.consumer.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;//spring提供的用于访问rest接口的模板对象
@Value("${user.url}")
private String url;
@GetMapping("/order/{id}")
public User getOrder(@PathVariable("id")Long id) {
//访问提供者,获取数据
User user=restTemplate.getForObject(url+id, User.class);
return user;
}
}
编写启动类
package org.consumer.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* Hello world!
*
*/
@SpringBootApplication
public class ConsumerOrder
{
//获取RestTemplate对象
@Bean//相当于xml中的Bean标签,主要用于调用当前方法获取到指定对象
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
public static void main( String[] args )
{
SpringApplication.run(ConsumerOrder.class, args);
}
}
启动该项目
分析:这里我们使用application.properties中获取User服务,然而如果url地址坏了或出现问题或者该服务停了怎么办。这里我们可用微服务框架springcloud,dubbo等,框架里包含了服务的注册与发现的服务组件,可以为我们解决这些问题。