本文的示例代码参考MultiServices
目录
Nginx
Installation
brew install nginx
sed -i "" 's/8080/80/g' /usr/local/etc/nginx/nginx.conf
sudo brew services start nginx
brew services list
- 测试
curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Prepare
mkdir Nginx
# cd Nginx
spring init -b 1.5.6.RELEASE -dweb --build gradle Service1
spring init -b 1.5.6.RELEASE -dweb --build gradle Service2
Service1
# cd Service1
vim src/main/java/com/example/Service1/DemoController.java
package com.example.Service1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo() {
return "Service1: " + "demo";
}
}
echo "server.port=9000" >> src/main/resources/application.properties
- 测试
./gradlew bootrun
curl localhost:9000/demo # 返回"Service1: demo"
Service2
# cd Service2
vim src/main/java/com/example/Service2/DemoController.java
package com.example.Service2;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo() {
return "Service2: " + "demo";
}
}
echo "server.port=9001" >> src/main/resources/application.properties
- 测试
./gradlew bootrun
curl localhost:9001/demo # 返回"Service2: demo"
Configuration
sudo vim /usr/local/etc/nginx/nginx.conf
# add lines
upstream ms {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
server {
listen 80;
server_name multiservices.test;
location / {
proxy_pass http://ms;
}
}
sudo nginx -s reload
sudo sh -c "echo '127.0.0.1 multiservices.test' >> /etc/hosts"
- 测试
curl multiservices.test/demo # 返回"Service2: demo"
curl multiservices.test/demo # 返回"Service1: demo"
ZooKeeper
Installation
brew install zookeeper
brew services start zookeeper
brew services list
- 测试
zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTING) 0]
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
Prepare
mkdir ZooKeeper
# cd ZooKeeper
spring init -b 1.5.6.RELEASE -dweb --build gradle Provider1
spring init -b 1.5.6.RELEASE -dweb --build gradle Provider2
spring init -b 1.5.6.RELEASE -dweb --build gradle Consumer
Provider1
# cd Provider1
vim build.gradle
# add lines
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.cloud:spring-cloud-starter-zookeeper-discovery')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Edgware.SR3"
}
}
sed -i "" '/SpringBootApplication;/a\
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
' src/main/java/com/example/Provider1/DemoApplication.java
sed -i "" '/@SpringBootApplication/a\
@EnableDiscoveryClient
' src/main/java/com/example/Provider1/DemoApplication.java
vim src/main/java/com/example/Provider1/DemoController.java
package com.example.Provider1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo() {
return "Provider1: " + "demo";
}
}
mv src/main/resources/application.properties src/main/resources/application.yml
tee src/main/resources/application.yml <<-'EOF'
spring:
application:
name: Provider
cloud:
zookeeper:
connect-string: localhost:2181
discovery:
enabled: true
server:
port: 9000
EOF
- 测试
./gradlew bootrun
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to localhost/127.0.0.1:2181, initiating session
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x162bc7bf0510009, negotiated timeout = 40000
curl localhost:9000/demo # 返回"Provider1: demo"
Provider2
# cd Provider2
vim build.gradle
# add lines
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.cloud:spring-cloud-starter-zookeeper-discovery')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Edgware.SR3"
}
}
sed -i "" '/SpringBootApplication;/a\
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
' src/main/java/com/example/Provider2/DemoApplication.java
sed -i "" '/@SpringBootApplication/a\
@EnableDiscoveryClient
' src/main/java/com/example/Provider2/DemoApplication.java
vim src/main/java/com/example/Provider2/DemoController.java
package com.example.Provider2;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo() {
return "Provider2: " + "demo";
}
}
mv src/main/resources/application.properties src/main/resources/application.yml
tee src/main/resources/application.yml <<-'EOF'
spring:
application:
name: Provider
cloud:
zookeeper:
connect-string: localhost:2181
discovery:
enabled: true
server:
port: 9001
EOF
- 测试
./gradlew bootrun
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to localhost/127.0.0.1:2181, initiating session
[localhost:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x162bc7bf0510009, negotiated timeout = 40000
curl localhost:9001/demo # 返回"Provider2: demo"
Consumer
# cd Consumer
vim build.gradle
# add lines
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.cloud:spring-cloud-starter-zookeeper-discovery')
compile('org.springframework.cloud:spring-cloud-starter-openfeign')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Edgware.SR3"
}
}
sed -i "" '/SpringBootApplication;/a\
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
' src/main/java/com/example/Consumer/DemoApplication.java
sed -i "" '/@SpringBootApplication/a\
@EnableDiscoveryClient
' src/main/java/com/example/Consumer/DemoApplication.java
sed -i "" '/EnableDiscoveryClient;/a\
import org.springframework.cloud.netflix.feign.EnableFeignClients;
' src/main/java/com/example/Consumer/DemoApplication.java
sed -i "" '/@EnableDiscoveryClient/a\
@EnableFeignClients
' src/main/java/com/example/Consumer/DemoApplication.java
vim src/main/java/com/example/Consumer/DemoController.java
package com.example.Consumer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/demo")
public String demo() {
return "Consumer: " + "demo";
}
}
- 测试
./gradlew bootrun
curl localhost:8080/demo # 返回"Consumer: demo"
vim src/main/java/com/example/Consumer/ProviderClient.java
package com.example.Consumer;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient("Provider")
public interface ProviderClient {
@GetMapping("/demo")
String demo();
}
vim src/main/java/com/example/Consumer/DemoController.java
// 省略了包名和导入文件
@RestController
public class DemoController {
@Autowired
private ProviderClient providerClient;
@GetMapping("/demo")
public String demo() {
return providerClient.demo();
}
}
- 测试
./gradlew bootrun
curl localhost:8080/demo # 返回"Provider1: demo"
curl localhost:8080/demo # 返回"Provider2: demo"
网友评论