Service discovery in swarm

Hello all-
I am building out a new API with spring boot microservices deployed to docker swarm. I was beginning down the path of implementing consul service discovery for these services and began to wonder, is that even necessary with the way that swarm does service discovery? Also, how does the swarm mesh compare to something like istio?

Any guidance or real-world experience is greatly appreciated. This is my first major project with docker and swarm and want to learn from others as much as possible rather than by making the same old mistakes.