728x90
반응형
subscription은 real-time event notification이다. 해당 기능을 위해서, subscription은 web socket을 사용한다.
request pipeline에 web socket을 추가 후, subscription을 build 해보자.
1. SubscriptionType 추가
Subscription.cs
using BulkyBook.Models;
namespace BulkyBook.GraphQL
{
public class Subscription
{
[Subscribe]
[Topic]
public Author OnAuthorAdded([EventMessage] Author author) => author;
}
}
2. request pipeline에 websoket 추가
Program.cs
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseWebSockets();
app.UseRouting();
app.UseAuthentication();
3. service에 SubscriptionType 추가
Program.cs
builder.Services
.AddGraphQLServer()
.AddQueryType<Query>()
.AddType<AuthorType>()
.AddType<BookType>()
.AddProjections()
.AddFiltering()
.AddSorting()
.AddMutationType<Mutation>()
.AddSubscriptionType<Subscription>()
.AddInMemorySubscriptions();
4. Mutation에 EventSender 추가
Mutation.cs
public class Mutation
{
[UseDbContext(typeof(ApplicationDbContext))]
public async Task<AddAuthorPayload> AddAuthroAsync(
AddAuthorInput input,
[ScopedService] ApplicationDbContext context,
[Service] ITopicEventSender eventSender,
CancellationToken cancellationToken)
{
var author = new Author
{
Name = input.Name
};
context.Authors.Add(author);
await context.SaveChangesAsync();
await eventSender.SendAsync(nameof(Subscription.OnAuthorAdded), author, cancellationToken);
return new AddAuthorPayload(author);
}
}
5. Event가 잘 생성되는지 테스트해보자.
Banana Pop Cake에서 subscription을 실행해보자.
1) subscription을 Run 하면 web socket으로 연결되어 event를 listen하고 있다.
2) postman으로 author를 추가하는 mutation을 보낸다.
3) mutation으로 추가된 저자의 데이터를 보여준다.
728x90
반응형
'GraphQL(HotChocolate)' 카테고리의 다른 글
.NET 6] GraphQL Voyager (0) | 2022.04.19 |
---|---|
.NET 6] Hot Chocolate GraphQL : mutation(5) (0) | 2022.02.09 |
GraphQL vs REST (0) | 2022.02.09 |
.NET 6] Hot Chocolate GraphQL : multiple requests (4) (0) | 2022.02.08 |
.NET 6] Hot Chocolate GraphQL : EF Core (3) (0) | 2022.02.08 |
댓글