Skip to content

Commit 4a4d2cd

Browse files
committed
add example for postgres.
1 parent 7677730 commit 4a4d2cd

File tree

11 files changed

+140
-32
lines changed

11 files changed

+140
-32
lines changed

examples/Cargo.toml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ log = "0.4.8"
1010
env_logger = "0.7.1"
1111
futures = "0.3.5"
1212
clap = "2.33.1"
13+
postgres = "0.17.3"
14+
r2d2_postgres = "0.16.0"
1315

1416
[dev-dependencies.rsocket_rust]
15-
version = "0.5.2"
17+
path = "../rsocket"
1618

1719
[dev-dependencies.rsocket_rust_transport_tcp]
18-
version = "0.5.2"
20+
path = "../rsocket-transport-tcp"
1921

2022
[dev-dependencies.rsocket_rust_transport_websocket]
2123
version = "0.5.2"
24+
path = "../rsocket-transport-websocket"
2225

2326
[dev-dependencies.tokio]
2427
version = "0.2.21"
@@ -40,3 +43,7 @@ path = "cli.rs"
4043
[[example]]
4144
name = "qps"
4245
path = "qps.rs"
46+
47+
[[example]]
48+
name = "postgres"
49+
path = "postgres.rs"

examples/docker-compose.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
version: '3.1'
2+
3+
services:
4+
postgres:
5+
image: postgres:9.6-alpine
6+
environment:
7+
POSTGRES_USER: postgres
8+
POSTGRES_PASSWORD: postgres
9+
ports:
10+
- 5432:5432
11+
volumes:
12+
- pgdata:/var/lib/postgresql/data
13+
14+
volumes:
15+
pgdata:
16+
driver: local
17+

examples/postgres.rs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#[macro_use]
2+
extern crate log;
3+
4+
use postgres::NoTls;
5+
use r2d2_postgres::{
6+
r2d2::{self, Pool},
7+
PostgresConnectionManager,
8+
};
9+
use rsocket_rust::{error::RSocketError, prelude::*};
10+
use rsocket_rust_transport_tcp::TcpServerTransport;
11+
use std::error::Error;
12+
13+
#[tokio::main]
14+
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
15+
env_logger::builder().format_timestamp_millis().init();
16+
let dao = Dao::try_new().expect("Connect failed!");
17+
RSocketFactory::receive()
18+
.acceptor(Box::new(move |_, _| {
19+
info!("accept new socket!");
20+
Ok(Box::new(dao.clone()))
21+
}))
22+
.on_start(Box::new(|| info!("server start success!!!")))
23+
.transport(TcpServerTransport::from("127.0.0.1:7878"))
24+
.serve()
25+
.await
26+
}
27+
28+
#[derive(Clone, Debug)]
29+
struct Dao {
30+
pool: Pool<PostgresConnectionManager<NoTls>>,
31+
}
32+
33+
impl RSocket for Dao {
34+
fn request_response(&self, _: Payload) -> Mono<Result<Payload, RSocketError>> {
35+
let pool = self.pool.clone();
36+
Box::pin(async move {
37+
// TODO: something wrong here!!!
38+
let mut client = pool.get().expect("Get client from pool failed!");
39+
let row = client
40+
.query_one("SELECT 'world' AS hello", &[])
41+
.expect("Execute SQL failed!");
42+
let result: String = row.get("hello");
43+
Ok(Payload::builder().set_data_utf8(&result).build())
44+
})
45+
}
46+
47+
fn metadata_push(&self, _: Payload) -> Mono<()> {
48+
unimplemented!()
49+
}
50+
51+
fn fire_and_forget(&self, _: Payload) -> Mono<()> {
52+
unimplemented!()
53+
}
54+
55+
fn request_stream(&self, _: Payload) -> Flux<Result<Payload, RSocketError>> {
56+
unimplemented!()
57+
}
58+
59+
fn request_channel(
60+
&self,
61+
_: Flux<Result<Payload, RSocketError>>,
62+
) -> Flux<Result<Payload, RSocketError>> {
63+
unimplemented!()
64+
}
65+
}
66+
67+
impl Dao {
68+
fn try_new() -> Result<Dao, Box<dyn Error + Sync + Send>> {
69+
let manager: PostgresConnectionManager<NoTls> = PostgresConnectionManager::new(
70+
"host=localhost user=postgres password=postgres"
71+
.parse()
72+
.unwrap(),
73+
NoTls,
74+
);
75+
let pool: Pool<PostgresConnectionManager<NoTls>> =
76+
r2d2::Pool::new(manager).expect("Create pool failed!");
77+
info!("==> create postgres pool success!");
78+
Ok(Dao { pool })
79+
}
80+
}

justfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
default:
2+
echo 'Hello, world!'
3+
test:
4+
@cargo test -- --nocapture

rsocket-benchmark/Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ env_logger = "0.7.1"
1212
bytes = "0.5.4"
1313
hex = "0.4.2"
1414
rand = "0.7.3"
15-
serde = "1.0.110"
16-
serde_derive = "1.0.110"
15+
serde = "1.0.111"
16+
serde_derive = "1.0.111"
1717
criterion = "0.3.2"
1818

1919
[dev-dependencies.rsocket_rust]
20-
version = "0.5.2"
20+
path = "../rsocket"
2121
features = ["frame"]
2222

2323
[dev-dependencies.rsocket_rust_transport_tcp]
24-
version = "0.5.2"
24+
path = "../rsocket-transport-tcp"
2525

2626
[dev-dependencies.rsocket_rust_transport_websocket]
27-
version = "0.5.2"
27+
path = "../rsocket-transport-websocket"
2828

2929
[dev-dependencies.rsocket_rust_messaging]
30-
version = "0.5.2"
30+
path = "../rsocket-messaging"
3131

3232
[dev-dependencies.tokio]
3333
version = "0.2.21"

rsocket-messaging/Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rsocket_rust_messaging"
3-
version = "0.5.2"
3+
version = "0.5.3"
44
authors = ["Jeffsky <jjeffcaii@outlook.com>"]
55
edition = "2018"
66
license = "Apache-2.0"
@@ -12,18 +12,18 @@ description = "Communicate with Spring RSocket Messaging."
1212
[dependencies]
1313
futures = "0.3.5"
1414
bytes = "0.5.4"
15-
serde = "1.0.110"
15+
serde = "1.0.111"
1616
serde_json = "1.0.53"
1717
serde_cbor = "0.11.1"
1818
hex = "0.4.2"
1919
url = "2.1.1"
2020

2121
[dependencies.rsocket_rust]
22-
version = "0.5.2"
22+
path = "../rsocket"
2323
features = ["frame"]
2424

2525
[dependencies.rsocket_rust_transport_tcp]
26-
version = "0.5.2"
26+
path = "../rsocket-transport-tcp"
2727

2828
[dependencies.rsocket_rust_transport_websocket]
29-
version = "0.5.2"
29+
path = "../rsocket-transport-websocket"

rsocket-test/Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@ env_logger = "0.7.1"
1212
bytes = "0.5.4"
1313
hex = "0.4.2"
1414
rand = "0.7.3"
15-
serde = "1.0.110"
16-
serde_derive = "1.0.110"
15+
serde = "1.0.111"
16+
serde_derive = "1.0.111"
1717

1818
[dev-dependencies.rsocket_rust]
19-
version = "0.5.2"
19+
path = "../rsocket"
2020
features = ["frame"]
2121

2222
[dev-dependencies.rsocket_rust_transport_tcp]
23-
version = "0.5.2"
23+
path = "../rsocket-transport-tcp"
2424

2525
[dev-dependencies.rsocket_rust_transport_websocket]
26-
version = "0.5.2"
26+
path = "../rsocket-transport-websocket"
2727

2828
[dev-dependencies.rsocket_rust_messaging]
29-
version = "0.5.2"
29+
path = "../rsocket-messaging"
3030

3131
[dev-dependencies.tokio]
3232
version = "0.2.21"

rsocket-transport-tcp/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rsocket_rust_transport_tcp"
3-
version = "0.5.2"
3+
version = "0.5.3"
44
authors = ["Jeffsky <jjeffcaii@outlook.com>"]
55
edition = "2018"
66
license = "Apache-2.0"
@@ -15,7 +15,7 @@ futures = "0.3.5"
1515
bytes = "0.5.4"
1616

1717
[dependencies.rsocket_rust]
18-
version = "0.5.2"
18+
path = "../rsocket"
1919
features = ["frame"]
2020

2121
[dependencies.tokio]

rsocket-transport-wasm/Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rsocket_rust_transport_wasm"
3-
version = "0.5.2"
3+
version = "0.5.3"
44
authors = ["Jeffsky <jjeffcaii@outlook.com>"]
55
edition = "2018"
66
license = "Apache-2.0"
@@ -11,23 +11,23 @@ description = "WASM Websocket RSocket transport implementation."
1111

1212
[dependencies]
1313
bytes = "0.5.4"
14-
wasm-bindgen-futures = "0.4.12"
14+
wasm-bindgen-futures = "0.4.13"
1515
futures-channel = "0.3.5"
1616
futures-util = "0.3.5"
17-
js-sys = "0.3.39"
18-
serde = "1.0.110"
19-
serde_derive = "1.0.110"
17+
js-sys = "0.3.40"
18+
serde = "1.0.111"
19+
serde_derive = "1.0.111"
2020

2121
[dependencies.rsocket_rust]
22-
version = "0.5.2"
22+
path = "../rsocket"
2323
features = ["frame"]
2424

2525
[dependencies.wasm-bindgen]
26-
version = "0.2.62"
26+
version = "0.2.63"
2727
features = ["serde-serialize"]
2828

2929
[dependencies.web-sys]
30-
version = "0.3.39"
30+
version = "0.3.40"
3131
features = [
3232
"FileReader",
3333
"ProgressEvent",

rsocket-transport-websocket/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rsocket_rust_transport_websocket"
3-
version = "0.5.2"
3+
version = "0.5.3"
44
authors = ["Jeffsky <jjeffcaii@outlook.com>"]
55
edition = "2018"
66
license = "Apache-2.0"
@@ -17,7 +17,7 @@ url = "2.1.1"
1717
tokio-tungstenite = "0.10.1"
1818

1919
[dependencies.rsocket_rust]
20-
version = "0.5.2"
20+
path = "../rsocket"
2121
features = ["frame"]
2222

2323
[dependencies.tokio]

0 commit comments

Comments
 (0)