手把手教你搭建springCloud--注册中心使用eureka

此文章写的相对比较简便,主要是为了方便新手开发,如果将所有内容一股脑全放出来,反而增加了新手开发的复杂度,个人认为这样通俗易懂,我们都是先将服务搭建起来之后再去了解其中的技术要点

如果需要已经搭建好的项目,去这里下载:https://download.csdn.net/download/qq_27184497/10719245

本文主要围绕搭建一个简单的微服务框架,所以主要项目有三个:

    1、eureka注册中心

    2、service--服务提供者

    3、webapp--服务消费者

好了,废话不多说,直接开始

1、搭建eureka服务注册中心

创建maven项目 :springcloud-1-eureka 

pom文件内容如下(因为springcloud是依赖springboot的,所以必须要有springboot的依赖)

<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>com.spring.cloud</groupId>
	<artifactId>springcloud-1-single-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloud-1-single-service</name>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--eureka server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
		<!-- spring boot test -->
		<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.RC1</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>
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

添加spring配置文件 application.yml

server:
  port: 8888
eureka:
  instance:
    ###注册中心ip
    hostname: 127.0.0.1
  client:
    ##是否注册自己。默认true
    registerWithEureka: false
    ##
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

新建注册中心启动类 EurekaApp.java

package com.spring.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * eureka注册中心
 *
 */
@SpringBootApplication
//开启eureka服务
@EnableEurekaServer
public class EurekaApp {
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(EurekaApp.class, args);
	}
}

到这一步,注册中旧搭建好了,现在启动main方法后在浏览器输入 地址 :http://127.0.0.1:8888/ 可以看到如下页面

2、搭建服务提供者service

创建maven项目 springcloud-1-service

pom文件内容

<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>com.spring.cloud</groupId>
	<artifactId>springcloud-1-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloud-1-service</name>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<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-web</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.RC1</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>
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

spring配置文件 application.yml

eureka:
  client:
    serviceUrl:
      ##注册中心服务器地址
      defaultZone: http://localhost:8888/eureka/
server:
  ##当前服务ip
  port: 8763
spring:
  application:
    ##当前服务的别名
    name: service-member

服务启动类 ServiceApp.java

package com.spring.cloud.service;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * service服务--服务提供者
 *
 */

@SpringBootApplication
// 使eureka客户端生效
@EnableEurekaClient
public class ServiceApp {
	public static void main(String[] args) {
		SpringApplication.run(ServiceApp.class, args);
	}
}

服务接口类 ServiceController.java--(我称呼为controller层)

package com.spring.cloud.service.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ServiceController {
	
	//读取yml配置文件中的端口号属性
	@Value("${server.port}")
	private String port ;
	/**
	 *  
	 * @return
	 */
	@RequestMapping(value = "/getService")
	public String getService() {
		return "this is service,port is " + port;
	}

}

到这一步,服务提供者也已经搭建好了启动main方法在浏览器输入: http://127.0.0.1:8763/getService 可以看到如下页面

并且注册中心也注册了这个服务

3、搭建服务消费者 webapp

创建maven项目 springcloud-1-webapp

pom文件内容

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.spring.cloud-webapp</groupId>
	<artifactId>springcloud-1-webapp</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-1-webapp Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<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-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</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.RC1</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>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

spring配置文件 application.yml

eureka:
  client:
    serviceUrl:
      ##注册中心服务器地址
      defaultZone: http://localhost:8888/eureka/
server:
  ##当前服务ip
  port: 8080
spring:
  application:
    ##当前服务的别名
    name: webapp

启动类 WebApp.java

package com.springcloud.webapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
// 使eureka客户端生效
@EnableEurekaClient
public class WebApp {

	public static void main(String[] args) {
		SpringApplication.run(WebApp.class, args);

	}
	
	
	//生成实例,在其他地方就可以直接使用@Autowire注解自动注入
	@Bean
	//开启负载均衡功能--如果需要使用rest方式调用必须加上这个注解,@LoadBalanced是ribbon的功能
	@LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

}

controller控制层  WebController.java

package com.springcloud.webapp.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class WebController {
	
	@Autowired
	private RestTemplate restTemplate;
	
	/**
	 * 
	 * @return
	 */
	@RequestMapping(value = "/getWebapp")
	public String getString () {
		//使用http链接方式调用
//		String url = "http://service-member/getService";
		//使用rest方式调用必须在restTemplate注入前加上@LoadBalanced注解,目的是开启的负载均衡的功能。其中service-member是服务的别名
		String url = "http://service-member/getService";
		return restTemplate.getForObject(url, String.class);
	}

}

到这一步,所有的项目和服务都已经搭好了

启动webapp的main方法,在浏览器输入:http://127.0.0.1:8080/getWebapp  就可以获取到服务中的内容

4、负载均衡的实现

到此为止,这还只是单个服务的调用,如何实现多服务负载均衡呢?

其实也很简答,只需要将服务提供者 springcloud-1-service 换个ip地址在启动一次就可以了,

springcloud-1-serviceapplication.yml 的端口换成8762

s

因为8763刚才已经启动过一次了,所以在这里改了端口号之后再将springcloud-1-service main方法启动一次即可

启动后,我们可以在注册中心看到,服务提供者service有2个服务在运行,这2个服务的端口分别是8762 和8763

然后我们在浏览器输入服务消费者 webapp的链接地址:http://127.0.0.1:8080/getWebapp

第一次访问的是8762的端口

然后刷新一下就变成了8763

好啦,到这里,负载均衡的功能就完成了,

最后给我的私人网站打个广告

柔情论坛 

 柔情恋爱话术库

猜你喜欢

转载自blog.csdn.net/qq_27184497/article/details/83045662