spring cloud(二) 服务提供者与消费者

本系列文章均参考:朝雨忆轻尘,感谢博主!

这里还有他的技术交流群:429854222,欢迎大家支持博主

若有侵权,还请告知,一定删除

这里我们使用consul作为服务注册中心(毕竟Eureka已经停更了。。。不过Eureka已经很稳定了一般情况下使用也没事)

consul传送门

服务提供者:

新建spring boot项目

Group填组名,Artifact填模块名,package一般是groupId+artifactId。

group按字面意思就是组,可以把其他spring boot项目加入这个组,由此组成了spring cloud。Artifact一般是项目名(模块),属于组中的什么功能(模块),比如是gateway,比如是config等等。

建好项目后的pom文件:

<?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>2.0.4.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.test.ream</groupId>
	<artifactId>test-producer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>test-producer</name>
	<description>producer project for Spring cloud</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
	</properties>

	<dependencies>
		<!-- web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        <!--spring-boot-admin-->
       	<dependency>
		    <groupId>de.codecentric</groupId>
		    <artifactId>spring-boot-admin-starter-client</artifactId>
		    <version>${spring.boot.admin.version}</version>
		</dependency>
		<!--consul-->
	    <dependency>
	        <groupId>org.springframework.cloud</groupId>
	        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
	    </dependency>
	</dependencies>
	
	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

parent里管理spring boot版本,这里使用的是2.0.4.RELEASE;

properties可以定义一些属性,如spring-cloud.version等;

dependencies添加依赖:consul-discovery启用对consul的支持,starter-web启用web;

dependencyManagement:Spring Cloud的依赖配置;

下面就是修改配置文件(在这之前先把application.properties更名为application.yml):

server:
  port: 8000   #服务启动端口
spring:
  application:
    name: test-producer   #应用名
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${spring.application.name}   # 注册到consul的服务名称${spring.application.name}对应的就是应用名
启动类添加@EnableDiscoveryClient:
@EnableDiscoveryClient
@SpringBootApplication
public class TestProducerApplication {

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

}

创建一个Controller(跟启动类在一个包下,建新包的话要在启动类加@ComponentScan),写一个简单的接口用于测试:

@RestController
public class HelloController {

	@GetMapping(value="test1")
	public String test1() {
		return "hello,world";
	}
}

启动应用分别访问http://localhost:8500http://localhost:8000/test1

 

服务提供者到此;

服务消费者

新建

 

pom跟提供者一样:

<?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>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.test.ream</groupId>
	<artifactId>test-comsumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>test-comsumer</name>
	<description>comsumer project for Spring cloud</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
	</properties>

	<dependencies>
	    <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
	
	<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

yml文件:

server:
  port: 8001
spring:
  application:
    name: test-comsumer
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName:  ${spring.application.name}    # 注册到consul的服务名称

新建controller调用提供者:

@RestController
public class CallHelloController {

    @Autowired
    private LoadBalancerClient loadBalancer;

    @GetMapping("/call")
    public String call() {
        ServiceInstance serviceInstance = loadBalancer.choose("test-producer");
        System.out.println("服务地址:" + serviceInstance.getUri());
        System.out.println("服务名称:" + serviceInstance.getServiceId());

        String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/test1", String.class);
        return callServiceResult;
    }

}

应用启动:

控制台:

调用成功!

好了,告辞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值