-
Notifications
You must be signed in to change notification settings - Fork 8
Quickstart
This page shows the smallest useful setup for 4.0.0.
- Java 17
- Spring Framework 7 / Spring Boot 4
- A WebSocket-capable Spring application
Use one of these artifacts:
-
wamp2spring-servletfor Spring MVC / servlet applications -
wamp2spring-reactivefor Spring WebFlux / reactive applications
Example Maven dependency for the servlet stack:
<dependency>
<groupId>ch.rasc</groupId>
<artifactId>wamp2spring-servlet</artifactId>
<version>4.0.0</version>
</dependency>Reactive applications use wamp2spring-reactive instead.
Servlet stack:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import ch.rasc.wamp2spring.servlet.EnableServletWamp;
@SpringBootApplication
@EnableServletWamp
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}Reactive stack:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import ch.rasc.wamp2spring.reactive.EnableReactiveWamp;
@SpringBootApplication
@EnableReactiveWamp
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}Both annotations register a default WAMP endpoint at /wamp.
Methods annotated with @WampProcedure are exposed through the dealer.
import org.springframework.stereotype.Service;
import ch.rasc.wamp2spring.annotation.WampProcedure;
@Service
public class CalculatorService {
@WampProcedure("calc.add")
public int add(int left, int right) {
return left + right;
}
}Client call example with AutobahnJS:
const result = await session.call("calc.add", [3, 10]);
// result === 13If you omit the annotation value, the default procedure name is beanName.methodName.
Methods annotated with @WampListener receive events through the broker.
import org.springframework.stereotype.Service;
import ch.rasc.wamp2spring.WampPublisher;
import ch.rasc.wamp2spring.annotation.WampListener;
@Service
public class TopicService {
private final WampPublisher wampPublisher;
public TopicService(WampPublisher wampPublisher) {
this.wampPublisher = wampPublisher;
}
@WampListener("app.topic")
public void onMessage(String payload) {
this.wampPublisher.publishToAll("app.server.topic", "echo: " + payload);
}
}Client example:
session.subscribe("app.server.topic", args => {
console.log(args[0]);
});
session.publish("app.topic", ["hello"]);<script src="autobahn.min.js"></script>
<script>
const connection = new autobahn.Connection({
url: "ws://127.0.0.1:8080/wamp",
realm: "default"
});
connection.onopen = session => {
session.subscribe("app.server.topic", args => console.log(args));
session.publish("app.topic", ["hello"]);
};
connection.open();
</script>Clients still send a realm in the initial HELLO message because the WAMP protocol requires it. wamp2spring accepts that value and establishes a WAMP session, but routing is not scoped or partitioned by realm.
For most applications, @EnableServletWamp or @EnableReactiveWamp is enough.
For additional control, implement one of these configurer interfaces:
-
WampConfigurerfor shared feature toggles and argument resolvers -
WampServletConfigurerfor servlet-specific handler registration and decoration -
WampReactiveConfigurerfor reactive handler mapping and decoration
Example:
import org.springframework.context.annotation.Configuration;
import ch.rasc.wamp2spring.config.Feature;
import ch.rasc.wamp2spring.config.Features;
import ch.rasc.wamp2spring.servlet.WampServletConfigurer;
@Configuration
public class WampConfiguration implements WampServletConfigurer {
@Override
public void configureFeatures(Features features) {
features.disable(Feature.DEALER);
}
}If you need full control over endpoint paths, subclass the relevant configuration class instead of using the enable annotation.
- Maven for artifact selection
- Modules for the full module map
- Features for supported WAMP capabilities
- Security and Authentication for securing sessions and message flows