1.这是一套整合好的消费者-注册中心-生产者流程框架代码,开箱即用。
2.项目介绍:使用技术有spring cloud eureka+spring cloud feign。
源码地址:https://gitee.com/acelee723/acelee-springcloud-eurekaDemo
acelee-eureka 服务注册中心
acelee-producer 服务提供者
acelee-consumer 服务消费者
3. 搭建acelee-eureka
1)pom添加依赖,记得<parent><version>改为1.5.9.RELEASE
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.acelee</groupId>
<artifactId>acelee-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>acelee-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2)添加启动代码中添加@EnableEurekaServer
注解
package com.acelee.aceleeeureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class AceleeEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(AceleeEurekaApplication.class, args);
}
}
3)配置文件增加eureka
spring.application.name=acelee-eureka
server.port=8000
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4)启动eureka,访问http://localhost:8000/
4. 搭建acelee-producer
1)pom添加依赖,记得<parent><version>改为1.5.9.RELEASE
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.acelee</groupId>
<artifactId>acelee-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>acelee-producer</name>
<description>Demo project for acelee-producer</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2)application.properties配置如下:
spring.application.name=acelee-producer
server.port=9000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
3)启动类中添加@EnableDiscoveryClient
注解
package com.acelee.producer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
4)建一个controller包,下面建一个HelloController类,提供hello服务
package com.acelee.producer.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Auther: Ace Lee
* @Date: 2019/3/13 09:12
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String index(@RequestParam String name) {
return "hello "+name+",this is acelee-producer messge";
}
}
5)启动producer工程,就可以看到已在eureka上面注册了
5.搭建acelee-consumer消费者
1)pom添加依赖,记得<parent><version>改为1.5.9.RELEASE,记得增加feign依赖
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.acelee</groupId>
<artifactId>acelee-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>acelee-consumer</name>
<description>Demo project for acelee-consumer</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2)application.properties配置如下:
spring.application.name=acelee-consumer
server.port=9001
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
3)启动类添加@EnableDiscoveryClient
和@EnableFeignClients
注解。
@EnableDiscoveryClient
:启用服务注册与发现@EnableFeignClients
:启用feign进行远程调用- Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
package com.acelee.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AceleeConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(AceleeConsumerApplication.class, args);
}
}
4)新建remote包,下面新建HelloRemote的接口,增加hello的方法
- name:远程服务名,即spring.application.name配置的名称,和producer的名称保持一致
- 此类中的方法和远程服务中contoller中的方法名和参数需保持一致,和producer的名称、参数保持一致。
package com.acelee.consumer.remote;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @Auther: Ace Lee
* @Date: 2019/3/13 09:34
*/
@FeignClient(name= "acelee-producer")
public interface HelloRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
5)新建controller包,下面新建HelloController 调用类。
- 将HelloRemote注入到controller层,像普通方法一样去调用即可。
package com.acelee.consumer.controller;
import com.acelee.consumer.remote.HelloRemote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Auther: Ace Lee
* @Date: 2019/3/13 09:40
*/
@RestController
public class HelloController {
@Autowired
HelloRemote helloRemote;
@RequestMapping("/hello/{name}")
public String index(@PathVariable("name") String name) {
return helloRemote.hello(name);
}
}
6)启动consumer,可以看到eureka上已经注册了,到此,最简单的一个服务注册与调用的例子就完成了。
6.测试
1)依次启动acelee-eureka、acelee-producer、acelee-consumer三个项目
2)先输入:http://localhost:9000/hello?name=acelee
检查acelee-producer服务是否正常
返回:hello acelee,this is acelee-producer messge
说明acelee-producer正常启动,提供的服务也正常。
3)浏览器中输入:http://localhost:9001/hello/acelee
返回:hello acelee,this is acelee-producer messge
说明客户端已经成功的通过feign调用了远程服务hello,并且将结果返回到了浏览器。
7.有其他想整和的技术如MySQL、thymeleaf、ribbon、zuul、mybatis、hystrix等等相关的可以直接联系博主,谢谢关注